Dispute Management

Dispute Management

The Disputes API provides comprehensive tools to manage disputes related to transactions in your merchant account. Handle chargebacks, upload evidence, and monitor dispute resolutions programmatically to protect your business and maintain customer relationships.

Overview

question-circleWhat are disputes?

Disputes are typically initiated by customers through their issuing bank when they challenge a transaction. Common reasons include fraud, authorization issues, processing errors, or customer satisfaction concerns. The Disputes API allows you to programmatically handle these disputes, submit evidence, and track their resolution status.

Key Features

Dispute Retrieval

  • Paginated dispute listings (10 results per page)
  • Filter by status, reason, date range, or transaction ID
  • Sort by response deadline, creation date, or status
  • Track dispute lifecycle and resolution progress

Evidence Management

  • Upload multiple file types (.jpeg, .pdf, .png, .tiff)
  • Maximum file size: 10MB per document
  • Organize evidence with custom names and descriptions
  • Automatic file validation and processing

Dispute Workflow

Step 1: List All Disputes

Use the List Disputes API to fetch disputes for your merchant account:

GET /underwriting/disputes

Common Query Parameters:

  • status: Filter by dispute status (OPEN, PENDING, WON, LOST, etc.)
  • reason: Filter by dispute reason (FRAUD, TECHNICAL, CLERICAL, etc.)
  • startDate / endDate: Filter by creation date range
  • sort: Sort by respond_by, created_at, updated_at, or status

Step 2: Identify Priority Disputes

Focus on disputes with:

  • Status: OPEN or PENDING (require immediate attention)
  • Approaching respond_by deadlines
  • High-value transaction amounts

Dispute Statuses

info-circleUnderstanding Dispute Statuses

Active Statuses (Require Action):

  • INQUIRY: Preliminary dispute investigation - prepare evidence
  • OPEN: Active dispute requiring immediate response
  • PENDING: Awaiting decision after evidence submission

Processing Statuses:

  • EVIDENCE_UPLOADED: Evidence successfully submitted for review
  • UPLOAD_FAILED: Evidence upload encountered errors - retry required
  • PREARBITRATION: Escalated dispute requiring additional review

Final Statuses:

  • WON: Dispute resolved in your favor - no further action needed
  • LOST: Dispute resolved against you - funds may be deducted
  • ACCEPTED: Dispute accepted without contest - refund processed

Best Practices

clock
Response Time Management

Monitor Deadlines

  • Check respond_by dates regularly
  • Set up automated alerts for approaching deadlines
  • Respond as quickly as possible to improve success rates

Prioritize High-Impact Disputes

  • Focus on high-value transactions first
  • Address fraud-related disputes immediately
  • Maintain organized evidence collection processes
file-alt
Evidence Quality

Document Organization

  • Use clear, descriptive file names
  • Provide comprehensive supporting documentation
  • Ensure all files are legible and properly formatted

Evidence Types by Dispute Reason

  • Fraud: Delivery confirmations, customer ID verification
  • Authorization: Signed agreements, approval codes
  • Processing: Transaction logs, refund records

Integration Examples

codeCommon Integration Patterns

Automated Dispute Monitoring:

// Check for new disputes daily
const checkDisputes = async () => {
  const disputes = await fetch('/underwriting/disputes?status=OPEN');
  const urgentDisputes = disputes.data.filter(d => 
    new Date(d.respond_by) - new Date() < 48 * 60 * 60 * 1000 // 48 hours
  );
  
  if (urgentDisputes.length > 0) {
    // Send alerts to dispute management team
    notifyDisputeTeam(urgentDisputes);
  }
};

Bulk Evidence Upload:

// Upload multiple evidence files for a dispute
const uploadEvidence = async (disputeId, evidenceFiles) => {
  const uploads = evidenceFiles.map(file => 
    uploadFile(`/file/dispute`, {
      dispute_id: disputeId,
      name: file.name,
      file: file.data
    })
  );
  
  return Promise.all(uploads);
};

Need Help?