disputes

Accept (concede) a dispute, conceding the disputed amount

Accept (concede) a dispute when you don't intend to contest it — for example when the charge was already refunded outside Truemed, or when contesting a low-value chargeback isn't worth the effort. Accepting concedes the disputed amount to the cardholder and closes the dispute with the processor.

This is terminal: the dispute moves to the accepted state and cannot be reopened. Only disputes in needs_response (an open chargeback awaiting evidence) can be accepted. Inquiries are warnings rather than chargebacks, and disputes already in a terminal state are immutable — accepting either returns 400. The call is idempotent: accepting a dispute that's already accepted returns its current state instead of erroring, so a retried request is safe.

post/api/v1/disputes/{business_id}/accept

Request

  • Base URL: https://dev-api.truemed.com
  • URL: https://dev-api.truemed.com/api/v1/disputes/{business_id}/accept
  • Auth: API key in header x-truemed-api-key

Path parameters

business_idstring required

The Truemed dispute ID (UUID).

Response

Successful response

amountinteger required

The original disputed amount in cents, independent of resolution.

created_atstring date-time required

When the dispute was created.

currencystring required

ISO currency code of the disputed amount.

dispute_idstring required

Stable Truemed dispute ID (UUID). Use this as the dispute's identifier.

due_bystring date-time nullable

Evidence submission deadline, if the dispute is challengeable.

metadataobject

Arbitrary merchant-set metadata.

network_reason_codestring nullable

Raw card-network reason code behind the dispute (e.g. Visa 10.4), if provided.

outcome'won' | 'lost' | 'accepted' | 'expired' | 'closed'

Denormalized terminal outcome of a dispute; null until terminal.

payment_session_idstring nullable

The Truemed payment session this dispute belongs to. Null for disputes on non-payment-session charges.

phase'inquiry' | 'dispute' | 'pre_arbitration' | 'arbitration'

Which round of a dispute this is — orthogonal to DisputeState (comparison doc §4.3/§5).

prior_dispute_idstring nullable

Truemed dispute ID (UUID) of the prior round in a pre-arbitration/re-filing chain, if any.

processor'STRIPE' | 'FAKE' | 'EXTERNAL' required

Payment platforms supported by the public dispute API.

processor_dispute_idstring required

Raw payment-processor dispute ID (e.g. Stripe du_…), for reconciliation.

reason'credit_not_processed' | 'duplicate' | 'fraudulent' | 'general' | 'noncompliant' | 'product_not_received' | 'product_unacceptable' | 'subscription_canceled' | 'unrecognized' required

Canonical, card-network dispute reason — the only reasons Truemed can receive, since it settles HSA/FSA card payments over Stripe and never ACH/bank-debit. The enum is the processor-independent contract: each processor adapter maps its native reason vocabulary into this set (Adyen's raw card-scheme reason codes collapse into these buckets), so the enum itself carries no processor specifics.

Human labels live in _DISPUTE_REASON_LABELS, exposed via .label — the single backend contract the frontend and merchant emails hydrate from instead of maintaining their own label maps.

resolved_atstring date-time nullable

When the dispute reached a terminal state.

state'inquiry' | 'needs_response' | 'under_review' | 'won' | 'lost' | 'accepted' | 'expired' | 'closed' required

Canonical, processor-agnostic dispute state — the 8-state model in the Processor Disputes Comparison doc §4.3. Distinct from the Stripe-shaped DisputeStatus: a processor adapter maps raw status/eventCodes → (DisputeState, DisputePhase). closed is the favorable no-contest inquiry outcome (excluded from win-rate), kept separate from won.

Changes

No recorded changes to this operation across all 1 revision of this API.