> ## 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 apps autorizados nas lojas

> Autorize ou revogue o acesso de um app (PDV, integrador) à Merchant API de uma loja, sem passar pelo lojista.

Em vez de pedir ao lojista que autorize um app no painel, o parceiro pode autorizar direto pela API. É assim que você instala, por exemplo, o PDV parceiro em todas as lojas novas.

| Ação | Endpoint | Sucesso |
| - | - | - |
| [Adicionar permissão](#adicionar-permissão) | `POST /partner/v2/merchants/{merchantId}/applications` | `202` |
| [Remover permissão](#remover-permissão) | `DELETE /partner/v2/merchants/{merchantId}/applications/{applicationId}` | `202` |

## Adicionar Permissão

**permission.applicationId** `uuid` *required*

ID do app a autorizar. O app precisa ser de [distribuição direta](/docs/inicio/primeiros-passos/distribuicao-direta.md).

```bash cURL theme={null}
curl --request POST 'https://api.deliveryvip.com.br/partner/v2/merchants/{merchantId}/applications' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{ "permission": { "applicationId": "161be0be-38d1-44a0-84ea-161093886253" } }'
```

```js Node.js theme={null}
await fetch(`https://api.deliveryvip.com.br/partner/v2/merchants/${merchantId}/applications`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ permission: { applicationId } }),
})
```

```python Python theme={null}
requests.post(
    f"https://api.deliveryvip.com.br/partner/v2/merchants/{merchant_id}/applications",
    headers={"Authorization": f"Bearer {token}"},
    json={"permission": {"applicationId": application_id}},
)
```

```json Resposta (202) theme={null}
{ "applicationId": "161be0be-38d1-44a0-84ea-161093886253" }
```

> [!NOTE]
>
> Os scopes não são escolhidos na chamada: a loja recebe os scopes que o app declara, limitados a `od.all` e `dv.loyalty`. Um campo `scopes` no corpo é ignorado. Chamar de novo para um app já autorizado não cria uma segunda permissão.

| Status | Quando |
| - | - |
| `404 Not Found` | App ou loja não encontrados. |
| `422 Unprocessable Content` | `application_must_be_manual_type`: o app é de distribuição interativa; ou `permission_failed`. |

## Remover Permissão

Revoga todos os tokens do app para essa loja. A integração deixa de acessar a loja na hora.

```bash cURL theme={null}
curl --request DELETE 'https://api.deliveryvip.com.br/partner/v2/merchants/{merchantId}/applications/{applicationId}' \
  --header 'Authorization: Bearer {token}'
```

```js Node.js theme={null}
await fetch(`https://api.deliveryvip.com.br/partner/v2/merchants/${merchantId}/applications/${applicationId}`, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${token}` },
})
```

```python Python theme={null}
requests.delete(
    f"https://api.deliveryvip.com.br/partner/v2/merchants/{merchant_id}/applications/{application_id}",
    headers={"Authorization": f"Bearer {token}"},
)
```

Responde `202` com o `applicationId`, ou `404` se o app não está autorizado na loja.


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