Skip to content

Dispute response

Dispute response answers chargebacks and contested deliveries with the Startup’s own records as Evidence, under each Dispute kind’s rules and deadlines.

Dispute response answers chargebacks and contested deliveries with the Startup’s own records as Evidence. Each Dispute kind has its own judge, deadline and remedies.

Contract

A chargeback arrives from Stripe when a cardholder’s bank opens it. An outcome or marketplace Dispute opens when a Customer contests delivered work through Order.dispute.

Rulechargebackoutcome or marketplace
Decided byThe cardholder’s bank: Dispute.decidedBy is issuerA Worker uninvolved in the Order: worker
RulingWon or lost, finalDispute.decision is buyer, seller or split
AnswerOne submission through Dispute.answer before Dispute.answerByEvidence before Dispute.answerBy
AppealNoneOne, by a Worker who took no part: Dispute.appeal
HeldDispute.held is the disputed amount, and Dispute.fee leaves the balance with itDispute.held is the contested amount
Refund while openRefused by Invoice.refund and Order.refundAllowed
StatusWhat it meansMoved by
inquiryThe bank asks before it charges back; an answer or a full refund closes it with no fee.Dispute.answer
openEvidence is due by Dispute.answerBy; a missed deadline decides for the buyer.Stripe, or Order.dispute
answeredThe Evidence is frozen and submitted.Dispute.answer
decidedThe ruling is in, and the held amount is released or returned.Dispute.decide
appealedOne second review, never for a chargeback.Dispute.appeal
closedFinal, and kept forever.Dispute.accept, or the final ruling

Dispute.answer builds the Evidence from records: the Agreement Version the buyer accepted, the delivery Evidence, and every Action on the Order. To concede, Dispute.accept closes the Dispute at once and records the reason as a Decision.

PreventionHow
Screen firstOrder.screen holds or blocks a risky payment before it is charged.
Early fraud warningOrder.screen stops fulfillment at once and, at or below the dispute fee, proposes a refund.
Refund firstA refund through Invoice.refund before a complaint costs less than a chargeback.
No surprise renewalsRenewal notice writes before every yearly renewal and long trial converts.

Verbs

Interfaces

Example

TypeScript
import { $ } from 'startup-builder'

// patentpad.com sold a $300 prior-art search. The buyer's bank opened a chargeback, "product not received",
// and Stripe took $300 plus the $15 fee from the balance. Evidence is due by answerBy.
const [dispute] = await $.Dispute.list({ where: "kind = 'chargeback' and status = 'open'" })

// Answer once, from records: the Agreement Version the buyer accepted, the delivered report and its download log.
await $.Dispute.answer({ dispute: dispute.$id, evidence: ['evidence_agreement', 'evidence_delivery', 'evidence_download'] })

// Weeks later the bank rules for the Startup: Dispute.decided arrives, and the $300 and the fee return.
$.on('Dispute.decided', (event) => console.log(event.data))