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

# Gerenciar recursos das lojas

> Contrate e cancele recursos adicionais, como DeliveryBot, cardápio por QR Code e domínio próprio.

Recursos são funcionalidades cobradas à parte ou incluídas no plano da loja. Os incluídos já vêm ativos; os adicionais (`inclusionType: ADDITIONAL` no [plano](/docs/guides/partner/plans/definicoes.md)) são contratados e cancelados por aqui.

| Ação | Endpoint | Sucesso |
| - | - | - |
| [Ativar recursos](#ativar-recursos) | `POST /partner/v2/merchants/{merchantId}/features/activate` | `202` |
| [Cancelar recursos](#cancelar-recursos) | `POST /partner/v2/merchants/{merchantId}/features/cancel` | `202` |

Os dois recebem a lista de recursos e respondem com o ID da loja:

**feature.featureTypes** `string[]` *required*

Um ou mais [tipos de recurso](#sobre-os-recursos).

```json Resposta (202) theme={null}
{ "merchantId": "d7240afd-d47c-4ae8-b79d-f14d3e8e1dd8" }
```

## Ativar Recursos

```bash cURL theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/merchants/{merchantId}/features/activate' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "feature": { "featureTypes": ["DELIVERYBOT_NOTIFICATION", "INDOOR_QRCODE"] } }'
```

```js Node.js theme={null}
await fetch(`https://api.deliveryvip.com.br/partner/v2/merchants/${merchantId}/features/activate`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ feature: { featureTypes: ['DELIVERYBOT_NOTIFICATION', 'INDOOR_QRCODE'] } }),
})
```

```python Python theme={null}
requests.post(
    f"https://api.deliveryvip.com.br/partner/v2/merchants/{merchant_id}/features/activate",
    headers={"Authorization": f"Bearer {token}"},
    json={"feature": {"featureTypes": ["DELIVERYBOT_NOTIFICATION", "INDOOR_QRCODE"]}},
)
```

Recursos já contratados são ignorados. Os erros vêm com **`406 Not Acceptable`**:

| `title` | Causa |
| - | - |
| `Invalid featureType` | Lista vazia ou tipo desconhecido. |
| `Feature type not exists in plan` | O plano da loja não tem preço para os recursos pedidos. |
| `Merchant does not have a valid license` | A loja não está em `TRIAL`, `DEMO` ou `ACTIVATED`, está bloqueada, ou o parceiro ou a revenda dela está com teste expirado, bloqueado ou cancelado. |
| `Feature type is hidden` | O recurso foi ocultado para essa loja. |

## Cancelar Recursos

Mesmo corpo, em `features/cancel`.

```bash theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/merchants/{merchantId}/features/cancel' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "feature": { "featureTypes": ["INDOOR_QRCODE"] } }'
```

Erros, também com `406`:

| `title` | Causa |
| - | - |
| `Invalid featureType` | Lista vazia ou tipo desconhecido. |
| `Feature type is included in plan` | O recurso faz parte do plano e não pode ser cancelado sozinho. |
| `Feature type not hired` | O recurso não está contratado. |

> [!NOTE]
>
> Um recurso cancelado aparece como `CANCELLED` até o fim do mês (ou por 24 horas) e depois volta a `AVAILABLE`. Recontratar dentro desse período não muda a data de contratação. Veja [Status dos recursos](/docs/guides/partner/merchant/definicoes.md#status-dos-recursos).

## Sobre os recursos

| Recurso | Descrição |
| - | - |
| `DELIVERYBOT_NOTIFICATION` | Mensagens no WhatsApp sobre o status do pedido para o cliente. [Saiba mais](https://delivery.ajuda.cc/geral/deliverybot/notificacao-de-pedidos). |
| `DELIVERYBOT_ASSISTANT` | Pré-atendimento ao cliente no WhatsApp. [Saiba mais](https://delivery.ajuda.cc/geral/deliverybot/assistente-de-atendimento). |
| `INDOOR_VIEWER` | Cardápio por QR Code no local, só para visualização. |
| `INDOOR_QRCODE` | Cardápio por QR Code no local, com pedidos pelo celular do cliente. |
| `INDOOR_TABLET` | Tablet no local para o cliente fazer pedidos. |
| `DOMAIN_CUSTOM` | Domínio personalizado para a loja. |
| `GROWTH_DISCOUNT` | Módulo de descontos. |
| `INTEGRATION_MARKETING` | Integrações de marketing. |
| `INTEGRATION_LOGISTIC` | Integrações de logística. |


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