Contestações
O banco do pagador pode contestar um Pix recebido. O valor contestado fica retido do seu saldo enquanto a contestação corre. Sem saldo suficiente, a retenção começa parcial e cresce com os próximos créditos até o valor contestado. Se o Pix não virou saldo, porque já está voltando ao pagador, nada é retido. Se outra contestação do mesmo Pix já segura o valor dele, nada mais é retido. Nesses casos semBloqueio diz o motivo. Você recebe med.infracao.criada quando ela abre e med.infracao.atualizada quando ela muda.
Listar #
GET /v2/ex/infracoes
Escopo: ex.med.read.
GET /v2/ex/infracoes
→ 200
{
"infracoes": [
{
"idInfracao": "01J1ZK7M9QW3ERT5TY6UI8OPQR",
"endToEndId": "E12345678202609181200000000000001",
"tipo": "FRAUDE",
"valor": "100.00",
"situacao": "ABERTA",
"relato": "pagador alega nao reconhecer o pagamento",
"prazoFinalizacao": "2026-09-25T12:00:00Z",
"bloqueioId": "med:01J1ZK7M9QW3ERT5TY6UI8OPQR",
"criadoEm": "2026-09-18T12:00:00Z"
}
]
}
| Parâmetro | Tipo | Descrição |
|---|---|---|
situacao |
string | Filtra por ABERTA, EM_DEFESA, ACATADA ou REJEITADA. Aceita várias, separadas por vírgula. |
limite, cursor |
inteiro, string | Com um dos dois, a lista vem por página, da mais recente para a mais antiga, com cursor. Sem eles, vem inteira, as abertas primeiro. |
de, ate |
string | Datas AAAA-MM-DD, inclusivas, pela abertura da contestação no horário de Brasília. Uma das duas sozinha também vale. |
origem |
string | PIX ou CARTAO. |
busca |
string | O endToEndId, a referência da venda ou o idInfracao, exato. |
Quando o mesmo Pix tem mais de uma contestação, a que foi rejeitada sem reter nada é um aviso repetido: ela não aparece na lista nem no resumo, e continua na consulta pelo idInfracao.
GET /v2/ex/infracoes/{id} devolve uma contestação.
| Campo | Tipo | Descrição |
|---|---|---|
situacao |
string | ABERTA, EM_DEFESA, ACATADA quando o pagador ganhou e o valor volta a ele, REJEITADA quando você ganhou e o valor volta ao seu disponível. |
valor |
string | O valor contestado. |
bloqueioId |
string | A retenção correspondente, em GET /v2/ex/bloqueios. Não vem quando nada é retido. |
semBloqueio |
string | Por que a retenção não houve ou é parcial. Só vem nesses casos. |
valorADescoberto |
string | Só aparece quando a retenção não cobriu o valor contestado: a diferença, que você passa a nos dever e que soma em aRecuperar do saldo. |
prazoFinalizacao |
string | Prazo da contestação. Quando capacidades.med é false, o desfecho pode chegar depois dele, em med.infracao.atualizada. |
A defesa depende da conta. Leia capacidades.med em GET /v2/ex/config: quando é false, a defesa é feita pela instituição junto ao provedor da conta, e você acompanha por aqui. Quando é true, consulte a referência interna.
Resumo #
GET /v2/ex/infracoes/resumo
Escopo: ex.med.read. Aceita de, ate, origem e busca, como a lista.
GET /v2/ex/infracoes/resumo?de=2026-10-01&ate=2026-10-15
→ 200
{
"abertas": { "quantidade": 3, "valor": "45.00" },
"acatadas": { "quantidade": 1, "valor": "20.00" },
"rejeitadas": { "quantidade": 2, "valor": "30.00" },
"total": { "quantidade": 6, "valor": "95.00" },
"retidoAgora": "45.00"
}
| Campo | Tipo | Descrição |
|---|---|---|
abertas |
objeto | As contestações em ABERTA ou EM_DEFESA: quantidade e valor contestado. |
acatadas |
objeto | As que voltaram ao pagador. |
rejeitadas |
objeto | As que voltaram ao seu disponível. |
total |
objeto | Todas do recorte. |
retidoAgora |
string | O que está retido por contestação agora, fora do recorte. |
O valor de cada grupo conta cada Pix uma vez, até o valor do Pix. A quantidade conta as contestações.
A contestação no seu saldo #
O disponível é debitado uma vez, quando o valor é retido. O desfecho só decide para onde vai o que está retido. Para não debitar duas vezes, acompanhe o total retido assim:
| Evento | O que acontece | No seu controle |
|---|---|---|
saldo.bloqueado com tipo MED |
valor sai do disponível e fica retido. |
Disponível menos valor, retido mais valor. |
saldo.bloqueio_ampliado |
Mais uma parte, valor, sai do disponível, ou da garantia quando vem daGarantia. |
Disponível menos (valor menos daGarantia), retido mais valor. |
saldo.desbloqueado com desfecho LIBERADO |
Você ganhou: o retido volta ao disponível. | Retido menos valor, disponível mais valor. |
devolucao.concluida com tipo MED e desfecho DEVOLVIDO |
O pagador ganhou: valor saiu do retido para ele, e liberado, quando vem, voltou ao disponível. |
Retido menos valor menos liberado, disponível mais liberado. |
med.infracao.criada, med.infracao.atualizada |
Nenhum dinheiro se move: dizem a contestação e a situação dela. | Nada. |
O devolucao.concluida da contestação traz id (o da retenção, o mesmo do saldo.bloqueado), tipo, valor, desfecho, endToEndId do Pix contestado e idInfracao. Ele não traz natureza: identifique a contestação pelo tipo MED, pelo id da retenção ou pelo idInfracao.
Controle o retido pelo total, e não retenção por retenção: quando o mesmo Pix tem mais de uma contestação, o valor retido passa de uma para a outra sem mexer no seu disponível. O extrato mostra cada retenção como BLOQUEIO e cada volta ao disponível como DESBLOQUEIO, e GET /v2/ex/bloqueios mostra o retido de cada uma agora.
Se o pagador recebeu de volta mais do que estava retido, a diferença soma em aRecuperar do saldo e não sai do disponível sozinha.
Contestar um saque seu #
Se um saque seu foi para um golpista, por golpe, invasão de conta, coerção ou acesso fraudulento, peça a contestação dele. Quem a abre é a instituição, na instituição de onde o Pix saiu. O pedido não move dinheiro: o que voltar entra como a volta do saque, em payout.devolucao_recebida.
PUT /v2/ex/pedidos-de-med/{id}
Escopo: ex.med.write. O id é seu, de 26 a 35 letras ou algarismos.
PUT /v2/ex/pedidos-de-med/MED01J1ZK7M9QW3ERT5TY6UI8O
{
"idEnvio": "SAQ04J1ZK7M9QW3ERT5TY6UI8O",
"motivo": "GOLPE",
"descricao": "Ligaram dizendo ser do banco e pediram a transferência."
}
→ 201
{
"id": "MED01J1ZK7M9QW3ERT5TY6UI8O",
"idEnvio": "SAQ04J1ZK7M9QW3ERT5TY6UI8O",
"endToEndId": "E12345678202609181200000000000004",
"motivo": "GOLPE",
"descricao": "Ligaram dizendo ser do banco e pediram a transferência.",
"situacao": "PEDIDO",
"valor": "30.00",
"valorRecuperado": "0.00",
"prazoEm": "2026-12-07T12:00:00Z",
"criadoEm": "2026-09-18T12:00:00Z"
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
idEnvio |
string | sim | O saque, já realizado, que saiu há até 80 dias. |
motivo |
string | sim | GOLPE, INVASAO_DE_CONTA, COERCAO, ACESSO_FRAUDULENTO ou OUTRA_FRAUDE. |
descricao |
string | sim | O que aconteceu, em até 2000 caracteres. |
Desacordo comercial, como o produto que não chegou ou não agradou, e a chave digitada errada não são caso de contestação, e a instituição recusa o pedido. A repetição com o mesmo corpo responde 200. Cada saque tem um pedido em andamento por vez.
| Campo | Tipo | Descrição |
|---|---|---|
situacao |
string | PEDIDO, ABERTO_NA_NOMINAL quando a instituição abriu, RECUSADO com o porquê em resposta, DEVOLVIDO ou NAO_DEVOLVIDO. Depois de RECUSADO você pode pedir de novo, com outro id. |
protocolo |
string | O número da contestação na instituição de onde o Pix saiu. Vem depois de aberta. |
valorRecuperado |
string | O que voltou do saque depois do pedido. |
prazoEm |
string | Até quando a contestação ainda pode ser aberta. |
GET /v2/ex/pedidos-de-med/{id} devolve um pedido, e GET /v2/ex/pedidos-de-med lista do mais novo, por página, com idEnvio, situacao, limite e cursor. Escopo: ex.med.read. Você recebe payout.med_pedido, payout.med_aberto, payout.med_recusado e payout.med_encerrado, com as chaves do pedido.
Erros #
| Status | title |
Quando |
|---|---|---|
| 400 | situacao_invalida |
Filtro de situação fora da lista. |
| 400 | limite_invalido |
limite fora de 1 a 200. |
| 400 | cursor_invalido |
Cursor malformado. |
| 400 | periodo_invalido |
de ou ate fora de AAAA-MM-DD, ou de depois de ate. |
| 400 | filtro_invalido |
origem fora de PIX e CARTAO. |
| 400 | motivo_do_med_invalido |
motivo fora da lista, no pedido sobre um saque. |
| 400 | descricao_obrigatoria |
Pedido sobre um saque sem descricao. |
| 400 | campo_desconhecido |
Pedido sobre um saque com campo fora de idEnvio, motivo e descricao. |
| 404 | nao_encontrado |
A contestação, o pedido ou o saque não existe nesta conta. |
| 409 | med_ja_pedido |
O saque já tem um pedido em andamento. O id dele vem em pedidoDoSaque. |
| 409 | id_duplicado |
O mesmo id com outro corpo. |
| 422 | saque_nao_liquidado |
O saque ainda não foi realizado. |
| 422 | prazo_do_med_vencido |
O saque saiu há mais de 80 dias. |
| 422 | saque_ja_devolvido |
O valor do saque já voltou inteiro. |