Skip to main content
Uma disputa acontece quando o portador questiona uma cobrança de cartão. Quando isso acontece, a Chargefy cria um objeto dispute ligado à charge original e abre um prazo para envio de evidências. Este guia mostra o que fazer quando uma disputa é criada, como montar a defesa nos campos nomeados de evidence, como enviar a contestação e como acompanhar a decisão. Para o conceito — quem participa, o ciclo de vida completo, o efeito no saldo e como prevenir disputas —, veja Como funcionam as disputas.
O prazo de defesa é de 6 dias corridos a partir da criação da disputa. Use o campo evidence_details.due_by do dispute como fonte de verdade para o prazo.

Resumo do fluxo

  1. Receba o webhook charge.dispute.created ou veja a disputa no Dashboard.
  2. Consulte o dispute e confirme status, reason, charge e evidence_details.due_by.
  3. Suba cada documento da defesa com POST /v1/files e purpose=dispute_evidence (PDF, JPG ou PNG) — cada upload retorna um file_*.
  4. Anexe cada file_* ao campo de arquivo correspondente de evidence e preencha os campos de texto com POST /v1/disputes/{id}, usando submit: false enquanto monta a defesa.
  5. Envie a defesa com submit: true. O envio é único e irreversível.
  6. Acompanhe charge.dispute.updated e charge.dispute.closed até a decisão final.
Um request de update que contém evidence envia a defesa por padrão: submit omitido vale true. Enquanto estiver montando a defesa em várias chamadas, mande submit: false explicitamente em cada uma.
Se o prazo termina com pelo menos um campo de arquivo preenchido e a defesa ainda não enviada, a Chargefy envia a defesa automaticamente por você. Você recebe um e-mail confirmando o envio e o charge.dispute.updated reflete a mudança para under_review.

O que muda quando a disputa nasce

Quando o dispute é criado, ele normalmente começa em needs_response. Nesse estado, a organização ainda pode montar e enviar a defesa. Campos importantes: Os valores possíveis de status: Os valores possíveis de reason, quando informado:
O ajuste financeiro do valor contestado acontece após o fim do prazo de defesa. Se nenhum campo de arquivo foi preenchido até lá, a disputa é encerrada como lost e você recebe charge.dispute.closed. Se a defesa foi enviada — por você ou automaticamente —, o dispute permanece em under_review até a decisão final da análise.

Prazos e estados

A decisão final pode levar semanas e, em alguns casos, até cerca de 120 dias. Evite fazer polling agressivo: use webhooks para acompanhar a mudança de estado.

Como a defesa é montada

A defesa inteira vive nos campos nomeados de evidence do dispute: 18 campos de texto (dados do comprador, datas, explicações) e 9 campos de arquivo (recibo, conversas, comprovante de envio, políticas). Campo de arquivo recebe o file_* de um upload com purpose=dispute_evidence; campo de texto recebe string livre. Cada update faz merge por campo — o que você não enviar fica como está — e string vazia ("") limpa um campo, de texto ou de arquivo. O catálogo completo dos 27 campos, com a descrição de cada um, está na visão geral do dispute.

Requisitos e limites

Os limites somados valem para o conjunto de campos preenchidos e são validados a cada update de evidence — você nunca descobre um estouro só na hora do envio, e a mensagem de erro diz quanto ainda resta. Também recomendamos, pela legibilidade da defesa:
  • Prefira páginas e capturas em orientação vertical.
  • Preto e branco costuma ficar mais legível na análise; use cor quando ela for parte da prova.
  • PDF protegido por senha é recusado no upload.
  • Não use páginas em branco.
  • Use nomes de arquivo simples, sem caracteres especiais.
  • Garanta que textos, comprovantes e datas estejam legíveis.
Se os arquivos estiverem ilegíveis ou o envio acontecer fora do prazo, a defesa pode não ser analisada. O upload valida formato, tamanho e contagem de páginas; qualidade visual e conteúdo continuam sendo responsabilidade da organização.

O que incluir na defesa

Monte a defesa pensando em uma pessoa que não conhece a venda. Os campos preenchidos precisam explicar por que a cobrança é legítima ou por que o produto/serviço foi entregue corretamente. Use os campos indicados pelo reason da disputa; uncategorized_text e uncategorized_file recebem o que não couber nos demais.

Fraude ou cobrança não reconhecida

Conecte o comprador à transação:
  • receipt: recibo ou comprovante da compra.
  • customer_communication: conversas em que o comprador reconhece a compra.
  • access_activity_log e customer_purchase_ip: autenticação, login, IP, dispositivo ou uso do produto.
  • customer_name, customer_email_address e billing_address: dados usados na compra.
  • customer_signature: assinatura em contrato ou comprovante de retirada.
  • product_description: o que foi vendido e como é entregue.

Produto não recebido

Prove a entrega ou disponibilização:
  • shipping_documentation: comprovante de postagem ou de entrega.
  • shipping_carrier, shipping_date, shipping_tracking_number e shipping_address: transportadora, datas, rastreio e endereço.
  • Em produtos digitais, access_activity_log e service_documentation mostram acesso, ativação ou download.

Produto inaceitável ou desacordo comercial

Mostre o contexto comercial:
  • product_description: a oferta como anunciada.
  • service_documentation e service_date: o que foi prestado e quando.
  • customer_communication: tratativas de suporte.
  • refund_policy, refund_policy_disclosure e refund_refusal_explanation: a política de reembolso, como o comprador tomou ciência dela e sua justificativa.

Cancelamento de assinatura

Mostre a regra aceita pelo comprador:
  • cancellation_policy e cancellation_policy_disclosure: a política de cancelamento e como ela foi apresentada.
  • cancellation_rebuttal: por que a cobrança é válida mesmo com a alegação.
  • customer_communication: histórico com o cliente.

Duplicidade ou crédito não processado

Monte a linha do tempo e a conciliação:
  • duplicate_charge_id: a charge (ch_*) que o comprador aponta como duplicata.
  • duplicate_charge_explanation e duplicate_charge_documentation: por que são vendas distintas.
  • refund_policy e refund_refusal_explanation: contexto do reembolso prometido ou recusado.

Enviar pelo Dashboard

Use este caminho quando a operação é feita por uma pessoa da organização.
  1. Acesse o Dashboard da Chargefy.
  2. Entre em Pagamentos → Disputas.
  3. Abra a disputa.
  4. Confira o prazo, valor, charge e customer.
  5. Anexe os documentos nos campos de arquivo e preencha os campos de texto da defesa. Você pode editar e limpar os campos enquanto o prazo estiver aberto.
  6. Revise os campos preenchidos e as Orientações exibidas na tela.
  7. Clique em Submeter evidências. O envio é único e irreversível.
  8. Acompanhe o histórico na própria disputa.
Se a organização decidir não defender a cobrança, encerre a disputa pela API com close. Essa ação concede a disputa e muda o dispute para lost.

Enviar pela API

Use este caminho quando seu sistema opera disputas server-to-server. As diferenças para contas com Chargefy for Platforms estão na seção dedicada mais abaixo.

1. Consulte a disputa

O dispute nasce com o hash de evidence completo — todas as 27 chaves, em ordem alfabética, null enquanto vazias:
Veja o contrato completo em Consultar dispute.

2. Suba os documentos

Cada documento da defesa é um upload próprio em POST /v1/files, com purpose=dispute_evidence. Repita para cada arquivo — um file_* por documento.
Cada upload retorna o file criado — guarde o id:
No upload, a Chargefy conta as páginas do documento (PDF conta as páginas reais; cada imagem conta 1) e recusa PDF protegido por senha ou ilegível. Os detalhes estão em Criar arquivo.

3. Anexe os arquivos e preencha os textos

Aponte cada file_* para o campo de arquivo correspondente de evidence e preencha os campos de texto, com submit: false enquanto monta. O merge é por campo; pra trocar um documento, envie o campo de novo com outro file_*; pra limpar um campo, envie "".
Cada chamada valida os arquivos apontados (existência, organização, purpose) e os limites somados da defesa. O mesmo file_* não pode ocupar dois campos.

4. Envie a defesa

Com pelo menos um campo de arquivo preenchido, envie a defesa. O request final pode completar os últimos campos e enviar na mesma chamada:
Se o envio for aceito, o dispute passa para under_review e evidence fica somente leitura. O envio é único: depois de aceito, a defesa não pode ser alterada nem reenviada. Os parâmetros, validações e erros completos estão em Atualizar disputa.
POST /v1/disputes/{id}/close não envia defesa. Essa ação concede a disputa e retorna o dispute como lost.
Erros comuns do fluxo:

Webhooks que você deve tratar

Configure seu endpoint para receber estes eventos — o cadastro do endpoint, a verificação de assinatura e a reentrega estão em Entrega de webhooks:

Chargefy for Platforms

Esta seção só se aplica a contas com o produto Chargefy for Platforms habilitado. Nesse produto, uma plataforma opera pagamentos para suas organizações filhas.
As disputas nascem nas vendas das suas organizações filhas. O fluxo é o mesmo descrito acima, com duas diferenças:
  • Webhooks — nos eventos charge.dispute.* entregues à plataforma, o campo top-level organization identifica a organização filha que originou a disputa. Use-o para rotear o caso no seu sistema.
  • Chamadas de API — envie o header Organization com essa organização filha em todas as chamadas do fluxo, inclusive nos uploads de POST /v1/files. Sem o header, a disputa da organização filha não é encontrada.

Checklist operacional

Antes de enviar a defesa — pelo Dashboard ou pela API —, confirme:
  • O prazo evidence_details.due_by ainda não expirou.
  • Todos os arquivos são PDF, JPG ou PNG, com até 7 MB cada.
  • O conjunto preenchido respeita os limites somados: até 10 páginas e 6,5 MB de arquivos, e até 150.000 caracteres de texto.
  • Pelo menos um campo de arquivo está preenchido — o envio exige arquivo.
  • Os documentos estão legíveis, de preferência em orientação vertical.
  • A defesa explica o contexto da compra, entrega, uso ou cancelamento.
  • Seu sistema está preparado para receber charge.dispute.closed.

Erros comuns