Transações

Contestações e disputas

Para saber o que precisa ser defendido agora, use a fila em vez de varrer transações uma a uma:

A fila de disputas (Dismart)

Para saber o que precisa ser defendido agora, use a fila em vez de varrer transações uma a uma:

GET /dismart/disputes
GET /dismart/disputes/{disputeId}

Aceita status (open | closed), transactionId, limit/offset. Vem ordenada da mais antiga aberta primeiro — a que está para vencer, não a mais recente. Cada item traz:

CampoPara quê
reason · reasonCode · reasonDescriptionO motivo da contestação — é ele que decide quais documentos reunir
deadlineO seu prazo de envio (hoursRemaining, expired, urgent)
defensibleAinda vale a pena enviar. false = caso decidido ou janela encerrada na adquirente
evidenceQuais tipos de comprovante já foram anexados
awaitingDocumentsDefensável e sem nenhum comprovante — a lista de trabalho
caseNumberComo a defesa é identificada pela adquirente

O summary traz awaitingDocuments/urgent/open sobre o conjunto filtrado, não sobre a página.

A fila é somente leitura. O envio dos documentos continua sendo o POST descrito abaixo.

Visão Geral

Quando o titular do cartão contesta uma cobrança junto ao emissor, a transação entra no status dispute (a disputa é aberta a partir do webhook da adquirente). Este endpoint permite que o vendedor submeta evidências para defender a transação.

⚠️ Cada submissão substitui todo o conjunto de evidências anterior da disputa (é uma sobrescrita completa, não um acréscimo). Envie sempre o conjunto completo de documentos.

Precauções

  • A transação precisa estar em dispute e já ter uma disputa aberta (caso contrário, retorna 422/404).
  • Envie o maior número possível de documentos relevantes — a ausência de documentação adequada pode encerrar a disputa em favor do cliente.
  • Há um prazo para enviar os documentos, contado a partir da abertura da disputa. Não presuma o valor: cada disputa devolve o seu prazo em deadline (ver O objeto disputes[]). Envie antes de deadline.hoursRemaining chegar a zero.
  • O ID da transação é sensível a maiúsculas e minúsculas (tra_... ou trx_...).

Requisição

POST /v1/transactions/{transactionId}/dispute

Parâmetros de URL

ParâmetroTipoObrigatórioDescrição
transactionIdstringSimIdentificador da transação em disputa

Parâmetros do Corpo da Requisição

ParâmetroTipoObrigatórioDescrição
documentsarraySimLista de documentos de evidência (mínimo 1, máximo 50)
descriptionstringNãoDescrição da situação (máx. 2000)
returnEmailstringNãoEmail para notificações sobre a disputa (máx. 255)

Objeto Document

CampoTipoObrigatórioDescrição
typestringSimTipo do documento (ver tabela abaixo)
assetUrlstring (url)CondicionalURL pública do arquivo. Um entre assetUrl e assetId
assetIdstring (asset_…)CondicionalArquivo que você subiu para nós (POST /v1/assets/uploads/confirm). Um entre assetUrl e assetId
descriptionstringNãoDescrição do documento (máx. 1000)
shippingDatestringNãoData de envio (apenas para shipmentProof)
trackingCodestringNãoCódigo de rastreamento (apenas para shipmentProof)
carrierstringNãoTransportadora (apenas para shipmentProof)
authenticationobjectNãoCredenciais para acessar o documento (username, password, token)

Tipos de Documentos (type)

TipoDescrição
deliveryProofComprovante de entrega
shipmentProofComprovante de envio
deliveryReceiptRecibo de entrega
fiscalDocumentDocumento fiscal (nota fiscal)
communicationProofComprovante de comunicação com o cliente

Exemplo de Requisição

{
  "returnEmail": "[email protected]",
  "description": "Disputa referente a inconsistência alegada na entrega do pedido.",
  "documents": [
    {
      "type": "deliveryProof",
      "assetUrl": "https://exemplo.com/comprovante-entrega.png",
      "description": "Registro da assinatura no momento da entrega.",
      "authentication": { "token": "bearer ey..." }
    },
    {
      "type": "shipmentProof",
      "assetUrl": "https://exemplo.com/comprovante-envio.png",
      "description": "Comprovante de envio da encomenda.",
      "shippingDate": "2026-06-10",
      "trackingCode": "CA1234CA",
      "carrier": "Correios"
    },
    {
      "type": "fiscalDocument",
      "assetUrl": "https://exemplo.com/nota-fiscal.pdf",
      "description": "Nota fiscal da compra."
    }
  ]
}

Resposta

Sucesso (HTTP 200 OK)

Retorna a transação completa atualizada, com status: "dispute" e a disputa preenchida em disputes[] (as evidências agrupadas por tipo). A estrutura é a mesma de Consultar.

O objeto disputes[]

Além das evidências que você enviou, cada disputa carrega o lado da adquirente — o motivo (que determina quais documentos reunir) e o prazo restante:

CampoTipoDescrição
statusstringopen (ainda defensável) ou closed (já decidida — evidência enviada aqui não muda nada)
reasonstringFamília do motivo informado pela adquirente (ex.: fraud)
reasonCodestringCódigo do motivo (ex.: F01) — chave estável para mapear o checklist de documentos
reasonDescriptionstringDescrição legível do motivo
openedAtdatetimeAbertura da disputa — é daqui que o prazo conta
closedAtdatetimeEncerramento, quando já decidida (null enquanto aberta)
deadline.deadlineAtdatetimeInstante em que a janela de defesa fecha
deadline.hoursRemainingintegerHoras restantes (negativo depois de vencido)
deadline.expiredbooleanJanela fechada — a adquirente não aceitará mais evidências
deadline.urgentbooleanAinda defensável, mas dentro do limiar de urgência

Leia o prazo em horas, não em dias: a janela é curta, e "aberta há 2 dias" não distingue um caso com 10 horas de vida de um já encerrado para envio. deadline é o prazo desta disputa — não presuma um valor fixo. É null apenas quando a adquirente não informou a data de abertura.

{
  "id": "tra_123456789",
  "customId": "E5D4C3B2A1",
  "amount": 1229,
  "originalAmount": 1229,
  "status": "dispute",
  "method": "credit",
  "currency": "BRL",
  "payment": {
    "provider": "selectwin",
    "version": "1.1",
    "refused": null,
    "reusable": false,
    "cardFirstDigits": "553121",
    "cardLastDigits": "4567",
    "cardBrand": "Mastercard",
    "cardRegistered": true,
    "installments": 1,
    "expirationDate": null,
    "paidAt": "2026-02-04T12:48:08.000Z",
    "allowRenewPayment": false,
    "invoiceLink": "https://selectwin.io/invoices/tra_123456789"
  },
  "discount": null,
  "discounts": null,
  "customer": {
    "id": "cus_123456789",
    "firstName": "Ariadini",
    "lastName": "Priscila Gissi",
    "email": "[email protected]",
    "birthdate": null,
    "gender": null,
    "document": { "type": "cpf", "number": "30998527831" },
    "telephone": {
      "countryCode": "55",
      "areaCode": "12",
      "number": "997706389",
      "line": "5512997706389"
    },
    "available": true,
    "delinquent": false,
    "externalReference": null,
    "additionalEmails": null,
    "metadata": null,
    "updatedAt": "2026-02-04T13:58:09.000Z",
    "createdAt": "2026-02-03T21:29:11.000Z"
  },
  "billing": {
    "address": {
      "id": "addr_123456789",
      "ownerId": "cus_123456789",
      "ownerType": "customer",
      "street": "Avenida Paulista",
      "number": "302",
      "complement": "Conjunto 3B, Bloco 3",
      "district": "Bela Vista",
      "city": "São Paulo",
      "state": "SP",
      "postcode": "01310000",
      "country": "BR",
      "latitude": null,
      "longitude": null,
      "line": "Avenida Paulista, 302 - Conjunto 3B, Bloco 3, Bela Vista, São Paulo - SP, 01310000, BR",
      "line1": "Avenida Paulista, 302",
      "line2": "Conjunto 3B, Bloco 3",
      "line3": "Bela Vista",
      "updatedAt": "2026-02-04T13:58:10.000Z",
      "createdAt": "2026-02-03T21:29:11.000Z"
    }
  },
  "shipping": null,
  "externalReference": null,
  "shippable": true,
  "spplited": false,
  "items": null,
  "receivables": [
    {
      "id": "rec_123456789",
      "recipient": "bus_123456789",
      "split": null,
      "status": "pending",
      "amount": 1229,
      "grossAmount": 1229,
      "anticipationFee": 0,
      "installmentNumber": 1,
      "description": null,
      "currency": "BRL",
      "authorizationCode": null,
      "paidAt": null,
      "refundedAt": null,
      "canceledAt": null,
      "expectedOn": null,
      "liable": true,
      "chargeProcessingFee": true,
      "updatedAt": "2026-02-04T12:48:08.000Z",
      "createdAt": "2026-02-04T12:48:08.000Z"
    }
  ],
  "splits": null,
  "refunds": null,
  "disputes": [
    {
      "id": "trd_123456789",
      "returnEmail": "[email protected]",
      "description": "Disputa referente a inconsistência alegada na entrega do pedido.",
      "status": "open",
      "reason": "fraud",
      "reasonCode": "F01",
      "reasonDescription": "unauthorized",
      "openedAt": "2026-02-04T18:00:00.000Z",
      "closedAt": null,
      "deadline": {
        "deadlineAt": "2026-02-07T18:00:00.000Z",
        "hoursRemaining": 22,
        "expired": false,
        "urgent": true
      },
      "deliveryProof": [
        {
          "assetUrl": "https://exemplo.com/comprovante-entrega.png",
          "description": "Registro da assinatura no momento da entrega.",
          "authentication": { "token": "bearer ey..." }
        }
      ],
      "shipmentProof": [
        {
          "carrier": "Correios",
          "assetUrl": "https://exemplo.com/comprovante-envio.png",
          "description": "Comprovante de envio da encomenda.",
          "shippingDate": "2026-06-10",
          "trackingCode": "CA1234CA"
        }
      ],
      "deliveryReceipts": null,
      "fiscalDocuments": [
        {
          "assetUrl": "https://exemplo.com/nota-fiscal.pdf",
          "description": "Nota fiscal da compra."
        }
      ],
      "communicationProof": null,
      "updatedAt": "2026-02-04T19:03:52.000Z",
      "createdAt": "2026-02-04T19:03:52.000Z"
    }
  ],
  "timeline": [
    {
      "id": "tl_900",
      "message": "Dispute evidence submitted",
      "details": null,
      "type": "dispute",
      "updatedAt": "2026-02-04T19:03:52.000Z",
      "createdAt": "2026-02-04T19:03:52.000Z"
    }
  ],
  "callback": null,
  "metadata": { "storeId": "str_123456", "storeName": "marketplace" },
  "updatedAt": "2026-02-04T19:19:13.000Z",
  "createdAt": "2026-02-04T12:48:07.000Z",
  "merchant": {
    "name": "Selectwin Corp",
    "merchantId": "bus_123456789",
    "isSubAccount": false
  },
  "_links": {
    "self": {
      "href": "https://api.selectwin.io/v1/transactions/tra_123456789",
      "method": "GET",
      "description": "Read a transaction."
    },
    "refund": {
      "href": "https://api.selectwin.io/v1/transactions/tra_123456789/refund",
      "method": "POST",
      "description": "Refund the transaction."
    },
    "capture": {
      "href": "https://api.selectwin.io/v1/transactions/tra_123456789/capture",
      "method": "POST",
      "description": "Capture the transaction."
    }
  }
}

Erros

error.codeHTTPQuando
transactionNotInDispute422A transação não está em dispute
disputeNotFound404Não há disputa aberta para esta transação
disputeAssetNotFound422Um assetId enviado não existe ou não é seu
transactionNotFound404Transação inexistente

Melhores Práticas

  1. Responda rapidamente para maximizar as chances de resolução favorável.
  2. Envie o conjunto completo de evidências em cada submissão (a submissão sobrescreve a anterior).
  3. Inclua comprovantes de entrega com assinatura e dados de rastreamento.
  4. Documente a comunicação com o cliente.
  5. Implemente medidas preventivas (descrições claras de produto, políticas transparentes) para reduzir disputas.

How is this guide?

On this page