Disputes

Disputes represent a buyer, or their bank, challenging a payment: chargebacks, pre-dispute inquiries, and compliance cases. Each dispute links back to the payment intent and order it contests, carries the disputed amount_money, and records a reason (such as fraudulent, product_not_received, or duplicate) and a case_type (inquiry, chargeback, compliance, or resolution).

A dispute moves through statuses from needs_response and under_review to a terminal won, lost, or prevented, with warning_ variants for early inquiries that may still become formal chargebacks. The action_required, evidence_response_allowed, and evidence_due_at fields tell you whether and by when you can respond. evidence_deadline_passed is true once the due date is in the past; evidence_submission_past_due is reported by the card network when the deadline passed without an evidence submission. This surface is read-only over the API: list and retrieve disputes to monitor and reconcile them.

Note:

Subscribe to the dispute.created, dispute.updated, and dispute.closed webhook events so your systems react the moment a case opens or resolves, rather than polling.

When the disputed payment funded gift cards, Flint freezes spending on the original cards and any replacement cards carrying that funding. Each load's funding_disputes records the dispute identity and outcome. A win clears only that dispute's restriction. Other disputes and merchant freezes remain in effect.

A lost funding dispute preserves balances and unresolved reservations. That dispute's entry in each affected load's funding_disputes has requires_resolution: true. To honor the gift card value despite the lost funding, call POST /v1/gift-card-funding-dispositions with dispute_id, disposition: honor_value, reason_message, and a durable Idempotency-Key. This requires commerce.gift_cards.adjustments.write. The 201 response returns a GiftCardFundingDisposition that records the full disputed amount, original gift card consideration, honored face value, and preserved reservations. The disputed amount can include other purchases; these amounts must not be added together. The disposition clears only this dispute's restriction and sets resolution.disposition to honor_value on that dispute's funding_disputes entries. Retry with the same key to recover the committed result.

The Dispute object#

Every field on a dispute, as returned by retrieve and carried by the endpoints below.

Attributes

action_requiredbooleanRequired
amount_moneyobjectRequired

Monetary amount represented as integer minor units plus an ISO 4217 currency code.

case_typeenumRequired
  • inquiry
  • chargeback
  • compliance
  • resolution
  • block
  • other
  • bank_return
created_atstringRequired

RFC3339 timestamp.

customerobject or null
customer_idstring
dispute_idstringRequired
evidence_deadline_passedbooleanRequired
evidence_due_atstring or null

RFC3339 timestamp.

evidence_response_allowedbooleanRequired
evidence_submission_countintegerRequired
evidence_submission_past_duebooleanRequired
fraud_warning_idstring
has_evidencebooleanRequired

Whether the provider reports evidence for this dispute, submitted or not. If evidence_submission_count is 0, no submission is recorded.

merchant_idstringRequired
metadatamap of stringRequired
orderobject or null
order_idstring
payment_intentobject or null
payment_intent_idstring
payment_optionenum or null
  • card
  • apple_pay
  • google_pay
  • affirm
  • ach_debit
  • null
reasonenumRequired
  • bank_cannot_process
  • check_returned
  • credit_not_processed
  • customer_initiated
  • debit_not_authorized
  • duplicate
  • fraudulent
  • general
  • incorrect_account_details
  • insufficient_funds
  • noncompliant
  • product_not_received
  • product_unacceptable
  • subscription_canceled
  • unrecognized
  • bank_account_closed
  • bank_account_not_found
  • bank_debit_not_authorized
  • bank_account_restricted
  • other
response_unavailable_reasonenum

Why a response is unavailable when evidence_response_allowed is false. Absent when no reason is reported. Current values are bank_return_not_contestable and provider_response_unavailable. The provider value means no evidence deadline was supplied; it does not identify why the provider cannot accept a response.

  • bank_return_not_contestable
  • provider_response_unavailable
statusenumRequired
  • warning_needs_response
  • warning_under_review
  • warning_closed
  • needs_response
  • under_review
  • won
  • lost
  • prevented
status_changed_atstring

Recorded time of the current status. On first observation this is the dispute creation time. Later status changes use the provider event time when available, or the time Flint observed the change. This may not be the exact decision or submission time.

updated_atstringRequired

RFC3339 timestamp.

JSON
{
  "action_required": true,
  "amount_money": {
    "amount": 5000,
    "currency": "USD"
  },
  "case_type": "chargeback",
  "created_at": "2026-03-17T14:30:00Z",
  "customer_id": "cus_123",
  "dispute_id": "du_123",
  "evidence_deadline_passed": false,
  "evidence_due_at": "2026-03-24T14:30:00Z",
  "evidence_response_allowed": true,
  "evidence_submission_count": 0,
  "evidence_submission_past_due": false,
  "has_evidence": false,
  "merchant_id": "mer_123",
  "metadata": {
    "case": "chargeback"
  },
  "order_id": "ord_123",
  "payment_intent_id": "pi_123",
  "payment_option": "card",
  "reason": "fraudulent",
  "status": "needs_response",
  "status_changed_at": "2026-03-17T14:30:00Z",
  "updated_at": "2026-03-17T14:30:00Z"
}

List disputes#

GET/v1/disputes

Requires scope payments.disputes.read

Returns a paginated list of disputes for the authenticated merchant with optional payment, customer, status, reason, case type, and timing filters.

Query parameters

payment_intent_idstring

Optional Flint payment intent ID filter.

order_idstring

Optional Flint order ID filter.

customer_idstring

Optional Flint customer ID filter.

statusenum

Optional dispute status filter.

  • warning_needs_response
  • warning_under_review
  • warning_closed
  • needs_response
  • under_review
  • won
  • lost
  • prevented
reasonenum

Optional normalized dispute reason filter.

  • bank_cannot_process
  • check_returned
  • credit_not_processed
  • customer_initiated
  • debit_not_authorized
  • duplicate
  • fraudulent
  • general
  • incorrect_account_details
  • insufficient_funds
  • noncompliant
  • product_not_received
  • product_unacceptable
  • subscription_canceled
  • unrecognized
  • bank_account_closed
  • bank_account_not_found
  • bank_debit_not_authorized
  • bank_account_restricted
  • other
case_typeenum

Optional dispute case type filter.

  • inquiry
  • chargeback
  • compliance
  • resolution
  • block
  • other
  • bank_return
created_afterstring

Only include disputes created at or after this RFC3339 timestamp.

created_beforestring

Only include disputes created at or before this RFC3339 timestamp.

evidence_due_afterstring

Only include disputes with evidence due at or after this RFC3339 timestamp.

evidence_due_beforestring

Only include disputes with evidence due at or before this RFC3339 timestamp.

page_sizeinteger

Page size, default 20, max 100.

page_tokenstring

Page token returned by the previous response.

Response · 200

dataarray of objectRequired
metaobject
next_page_tokenstring
request_idstring
curl https://api.withflintpay.com/v1/disputes \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get a dispute#

GET/v1/disputes/{dispute_id}

Requires scope payments.disputes.read

Returns one dispute by ID, with optional customer, order, and payment intent expansions.

Path parameters

dispute_idstringRequired

Flint dispute ID.

Query parameters

expandarray of enum

Supported expansions: customer, order, payment_intent. Expansion requires payments.disputes.read plus the read scope for each expanded resource. Limits: at most 10 unique expand paths per request; path depth at most 2. Repeat expand, for example expand=customer&expand=order, or pass one comma-separated value.

  • customer
  • order
  • payment_intent

Response · 200

dataobjectRequired
metaobject
request_idstring
curl https://api.withflintpay.com/v1/disputes/{dispute_id} \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": {
    "action_required": true,
    "amount_money": {
      "amount": 5000,
      "currency": "USD"
    },
    "case_type": "chargeback",
    "created_at": "2026-03-17T14:30:00Z",
    "customer_id": "cus_123",
    "dispute_id": "du_123",
    "evidence_deadline_passed": false,
    "evidence_due_at": "2026-03-24T14:30:00Z",
    "evidence_response_allowed": true,
    "evidence_submission_count": 0,
    "evidence_submission_past_due": false,
    "has_evidence": false,
    "merchant_id": "mer_123",
    "metadata": {
      "case": "chargeback"
    },
    "order_id": "ord_123",
    "payment_intent_id": "pi_123",
    "payment_option": "card",
    "reason": "fraudulent",
    "status": "needs_response",
    "status_changed_at": "2026-03-17T14:30:00Z",
    "updated_at": "2026-03-17T14:30:00Z"
  },
  "request_id": "bce56cba-0827-44aa-bb56-4f200ba15ee6"
}

Was this helpful?