# MED (/docs/conta-digital/med)

<QuickLinks>
  <QuickLink href="/docs/conta-digital/endpoints/infractions/get_infractions" title="Listar contestações MED" method="GET" path="/transactions/infractions" />

  <QuickLink href="/docs/conta-digital/endpoints/infractions/get_infraction" title="Consultar contestação MED" method="GET" path="/transactions/infractions/{protocol}" />
</QuickLinks>

O MED (Mecanismo Especial de Devolução) é o processo do Banco Central para devolver um Pix contestado. O banco de quem pagou abre a contestação contra a conta que recebeu, com prazo de resposta. Sem resposta, o valor pode voltar ao pagador, saindo do saldo da conta.

<Callout type="info">
  A resposta à contestação exige documento e decisão do titular e é dada no painel da Conta Digital, antes do prazo em `dueAt`. Pela API, com o escopo `INFRACTION_READ`, você acompanha cada contestação.
</Callout>

## Ciclo e saldo [#ciclo-e-saldo]

<Mermaid
  chart="`
flowchart LR
  A[&#x22;INFRACTION_OPENED&#x22;] --> B[&#x22;Valor bloqueado&#x22;]
  B --> C{&#x22;Resultado&#x22;}
  C -->|&#x22;AGREED&#x22;| D[&#x22;Valor volta ao pagador&#x22;]
  C -->|&#x22;DISAGREED&#x22;| E[&#x22;Valor volta ao saldo, menos a taxa&#x22;]
  C -->|&#x22;CANCELLED&#x22;| F[&#x22;Valor volta inteiro&#x22;]

  style A fill:#f59e0b,stroke:#d97706,color:#ffffff
  style D fill:#ef4444,stroke:#dc2626,color:#ffffff
  style E fill:#14ce71,stroke:#0eb464,color:#ffffff
  style F fill:#14ce71,stroke:#0eb464,color:#ffffff
`"
/>

| Momento                    | Webhook                                               | Linha do extrato                                                                                                                                      |
| -------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Abertura                   | `INFRACTION_OPENED`                                   | `INFRACTION_BLOCK`: o valor sai do saldo disponível, quando `infraction.blocksBalance` é `true` nos [limites](/docs/conta-digital/statement#limites). |
| Prazo chegando             | `INFRACTION_DEADLINE`, quando faltam 48, 24 e 6 horas |                                                                                                                                                       |
| Procedente (`AGREED`)      | `INFRACTION_CLOSED`                                   | `INFRACTION_SETTLED`: o valor voltou ao pagador.                                                                                                      |
| Improcedente (`DISAGREED`) | `INFRACTION_CLOSED`                                   | `INFRACTION_RELEASED`: o valor volta ao saldo, menos a taxa de análise.                                                                               |
| Cancelada                  | `INFRACTION_CLOSED` com `status: CANCELLED`           | `INFRACTION_RELEASED`: o valor volta inteiro, sem taxa.                                                                                               |

Enquanto a contestação não termina, o estorno da cobrança e a devolução do depósito contestados são recusados com `REFUND_INFRACTION_OPEN`.

## Listar [#listar]

[`GET /transactions/infractions`](/docs/conta-digital/endpoints/infractions/get_infractions), da mais recente para a mais antiga pela data de abertura, paginada por cursor.

Para acompanhar só as que ainda não terminaram, filtre com `open=true`: vêm todas as que não estão `CLOSED` nem `CANCELLED`. Todos os filtros em [Listar contestações MED](/docs/conta-digital/endpoints/infractions/get_infractions).

## Consultar [#consultar]

[`GET /transactions/infractions/{protocol}`](/docs/conta-digital/endpoints/infractions/get_infraction), com o `protocol` que vem no webhook `INFRACTION_OPENED`.

```json
{
  "id": "cmu6f0a1b000001s6abcd1234",
  "protocol": "b1c2d3e4-5f60-4a7b-8c9d-0e1f2a3b4c5d",
  "type": "REFUND_REQUEST",
  "status": "OPEN",
  "reportedBy": "DEBITED_PARTICIPANT",
  "reportDetails": "Cliente não reconhece a compra.",
  "analysisResult": null,
  "analysisDetails": null,
  "endToEndId": "E99999999202610051433a1b2c3d4e5f",
  "blockedAmount": 1500,
  "feeCharged": 0,
  "settledAmount": 0,
  "reportedAt": "2026-10-06T10:00:00.000Z",
  "dueAt": "2026-10-13T10:00:00.000Z",
  "closedAt": null,
  "origin": {
    "kind": "PAYMENT",
    "id": "cmu2wbljx0000e8gtlic8q1gi",
    "amount": 1500,
    "paidAt": "2026-10-05T14:33:10.004Z",
    "payerName": "Maria Souza",
    "payerDocument": "***.982.247-**"
  }
}
```

| Campo                         | Descrição                                                                                                                                                                                              |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `status`                      | `OPEN`, `ACKNOWLEDGED`, `DEFENDED`, `ANSWERED`, `WAITING_PSP`, `WAITING_ADJUSTMENTS`, `CANCELLED` ou `CLOSED`. Só `OPEN`, `CLOSED` e `CANCELLED` mexem no saldo; os outros são etapas entre os bancos. |
| `analysisResult`              | Resultado, quando `CLOSED`: `AGREED` (procedente, o valor volta ao pagador) ou `DISAGREED` (improcedente, o valor volta ao saldo, menos a taxa de análise).                                            |
| `blockedAmount`               | Valor separado do saldo disponível enquanto a análise corre.                                                                                                                                           |
| `feeCharged`, `settledAmount` | Taxa de análise cobrada e valor devolvido ao pagador. `0` até o resultado.                                                                                                                             |
| `origin`                      | A operação contestada. `kind` é `PAYMENT` (cobrança) ou `DEPOSIT` (Pix recebido sem cobrança), e `id` é o mesmo `paymentId` ou `depositId` dos webhooks.                                               |

Todos os campos em [Consultar contestação MED](/docs/conta-digital/endpoints/infractions/get_infraction).