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

# Membros da revenda

> Liste, adicione, atualize e remova quem acessa o painel da revenda, e gere magic links de acesso.

Membros da revenda são os usuários com acesso ao painel dela. Os endpoints e as regras são os mesmos dos [membros da loja](/docs/guides/partner/merchant/utilizando-a-api/membros-do-merchant.md), trocando `/merchants/{merchantId}` por `/resales/{resaleId}`.

| Ação | Endpoint | Sucesso |
| - | - | - |
| Listar | `GET /partner/v2/resales/{resaleId}/members` | `200` ou `204` |
| Adicionar | `POST /partner/v2/resales/{resaleId}/members` | `201` |
| Atualizar | `PATCH /partner/v2/resales/{resaleId}/members/{memberId}` | `200` |
| Remover | `DELETE /partner/v2/resales/{resaleId}/members/{memberId}` | `200` |
| Magic link | `POST /partner/v2/resales/{resaleId}/members/{memberId}/magic-link` | `201` |

## Listar membros

Traz os membros com acesso ativo; convites pendentes não aparecem.

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

```json Resposta (200) theme={null}
[
  {
    "id": "b90a8ae0-9cf0-40ef-a295-b3f43db65076",
    "role": "OWNER",
    "user": { "name": "Carlos Lima", "email": "carlos@revendasul.com.br" },
    "status": "ACTIVE"
  }
]
```

## Adicionar membro

**member.role** `string` *required*

Papel, **em minúsculas**: `owner`, `manager` ou `operator`. Volta em maiúsculas.

**user.name** `string` *required*

Nome do usuário.

**user.email** `string` *required*

E-mail do usuário.

```bash cURL theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/members' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{
    "member": { "role": "manager" },
    "user": { "name": "Ana Costa", "email": "ana@revendasul.com.br" }
  }'
```

```js Node.js theme={null}
const response = await fetch(`https://api.deliveryvip.com.br/partner/v2/resales/${resaleId}/members`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    member: { role: 'manager' },
    user: { name: 'Ana Costa', email: 'ana@revendasul.com.br' },
  }),
})
const member = await response.json()
```

```python Python theme={null}
response = requests.post(
    f"https://api.deliveryvip.com.br/partner/v2/resales/{resale_id}/members",
    headers={"Authorization": f"Bearer {token}"},
    json={
        "member": {"role": "manager"},
        "user": {"name": "Ana Costa", "email": "ana@revendasul.com.br"},
    },
)
member = response.json()
```

Responde `201` com o membro. Com e-mail novo, a conta é criada e o membro volta `ACTIVE`. Com e-mail que já tem conta, um convite é enviado e o membro volta `INVITED` até o aceite. Papel inválido (inclusive em maiúsculas) retorna `422`.

## Atualizar membro

```bash theme={null}
curl --request PATCH 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/members/{memberId}' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "member": { "role": "operator" } }'
```

## Remover membro

Remove o acesso (ou cancela o convite) e responde com o `id` do membro.

```bash theme={null}
curl --request DELETE 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/members/{memberId}' \
  --header 'Authorization: Bearer {token}'
```

## MagicLink

Gera um link de acesso sem senha para um membro `ACTIVE`, válido por 6 horas e de uso único. Se a conta exige código por e-mail ou dois fatores, o link inicia esse desafio.

```bash theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/resales/{resaleId}/members/{memberId}/magic-link' \
  --header 'Authorization: Bearer {token}'
```

```json Resposta (201) theme={null}
{
  "magicLink": "https://painel.seudominio.com.br/magic-links/authenticate?em=...&sign_in_token=...",
  "magicLinkExpiresAt": "2025-10-23T07:33:23-03:00"
}
```

> [!WARNING]
>
> O magic link e o convite usam o domínio do painel do parceiro. Sem domínio configurado, a resposta é `403` (`partner must be setup a domain to user access`).


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