> ## 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 assinatura das revendas

> Ative, cancele, avise, bloqueie e atualize o código do contrato da assinatura de uma revenda.

As ações são as mesmas da [assinatura das lojas](/docs/guides/partner/merchant/utilizando-a-api/gerenciar-assinatura-dos-merchants.md), em `/partner/v2/resales/{resaleId}/<ação>`. As de estado respondem `202 Accepted` com o `resaleId`; a atualização responde `200 OK`.

> [!NOTE]
>
> A assinatura de uma revenda não tem plano. `activate`, `subscription` e o antigo `agreementCode` aceitam só o `agreementCode`; um `planId` no corpo é ignorado.

| Ação | Endpoint | Exige status |
| - | - | - |
| [Ativar](#ativar-assinatura) | `POST activate` | `TRIAL`, `TRIAL_EXPIRED` ou `CANCELLED` |
| [Cancelar](#cancelar-assinatura) | `POST cancel` | `ACTIVATED` |
| [Ativar aviso](#ativar-aviso) / [Desativar](#desativar-aviso) | `POST warning` / `unwarning` | `ACTIVATED` |
| [Bloquear](#bloquear-assinatura) / [Desbloquear](#desbloquear-assinatura) | `POST block` / `unblock` | `ACTIVATED` |
| [Atualizar](#atualizar-assinatura) | `PUT subscription` | `TRIAL`, `ACTIVATED` ou `DEMO` |

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

Status que não aceita a ação retorna `422` com o motivo no `title`.

## Ativar Assinatura

**subscription.agreementCode** `string`

Código do contrato. Omita para manter o atual.

```bash cURL theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/activate' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "subscription": { "agreementCode": "123456" } }'
```

```js Node.js theme={null}
await fetch(`https://api.deliveryvip.com.br/partner/v2/resales/${resaleId}/activate`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ subscription: { agreementCode: '123456' } }),
})
```

```python Python theme={null}
requests.post(
    f"https://api.deliveryvip.com.br/partner/v2/resales/{resale_id}/activate",
    headers={"Authorization": f"Bearer {token}"},
    json={"subscription": {"agreementCode": "123456"}},
)
```

Como nas lojas, reativar no mesmo mês do cancelamento (ou em até 24 horas) muda o status mas ignora o `agreementCode`; envie-o depois com [Atualizar Assinatura](#atualizar-assinatura).

## Cancelar Assinatura

Sem corpo: `POST /partner/v2/resales/{resaleId}/cancel`.

> [!CAUTION]
>
> Cancelar a revenda **cancela também todas as lojas `ACTIVATED` dela** e remove os domínios da revenda. As lojas precisam ser reativadas uma a uma depois que a revenda voltar a `ACTIVATED`.

## Ativar Aviso

Sem corpo: `POST /partner/v2/resales/{resaleId}/warning`. Desliga um bloqueio ativo.

## Desativar Aviso

Sem corpo: `POST /partner/v2/resales/{resaleId}/unwarning`.

## Bloquear Assinatura

Sem corpo: `POST /partner/v2/resales/{resaleId}/block`.

> [!NOTE]
>
> O bloqueio não cancela: a assinatura continua `ACTIVATED`. Enquanto a revenda está bloqueada, as lojas dela perdem a licença.

## Desbloquear Assinatura

Sem corpo: `POST /partner/v2/resales/{resaleId}/unblock`.

## Atualizar Assinatura

Atualiza o código do contrato sem mudar o status. Envie `""` para apagar o código.

```bash cURL theme={null}
curl --request PUT 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/subscription' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "subscription": { "agreementCode": "123456" } }'
```

```js Node.js theme={null}
await fetch(`https://api.deliveryvip.com.br/partner/v2/resales/${resaleId}/subscription`, {
  method: 'PUT',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ subscription: { agreementCode: '123456' } }),
})
```

```python Python theme={null}
requests.put(
    f"https://api.deliveryvip.com.br/partner/v2/resales/{resale_id}/subscription",
    headers={"Authorization": f"Bearer {token}"},
    json={"subscription": {"agreementCode": "123456"}},
)
```

## Código do Contrato

> [!WARNING]
>
> `PUT /partner/v2/resales/{resaleId}/agreementCode` está **descontinuado** em favor de [Atualizar Assinatura](#atualizar-assinatura). A data anunciada foi 01/07/2025; a rota ainda responde, com os headers `Deprecation: true` e `Sunset: Tue, 01 Jul 2025 00:00:00 GMT`, e pode ser removida a qualquer momento.

Aceita o mesmo corpo de `PUT subscription`. Migre trocando apenas o final do caminho.


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