# Stripe dispute process diagrams Can download as SVG using https://bramp.github.io/js-sequence-diagrams/ ## New dispute ```sequence User->Bank: Raises new dispute Bank->Stripe: Raises dispute Stripe->Connector: Sends `charge.dispute.created` webhook notification Connector->Ledger: Emits `DISPUTE_CREATED` event Connector->Ledger: Emits `PAYMENT_DISPUTED` event (to mark payment as disputed) Connector->Ledger: Emits `REFUND_AVAILABILITY_UPDATED` event (to mark payment as non-refundable) Ledger->Ledger: Projects dispute transaction Ledger->SNS: Sends `DISPUTE_CREATED` event SNS->Adminusers SQS subscriber: Sends `DISPUTE_CREATED` event Adminusers SQS subscriber->Adminusers: Process SQS messages Adminusers-> Service admins: Sends new dispute email Ledger->Selfservice: Displays dispute info in admin tool Ledger->PublicAPI: provides dispute info via v1/disputes endpoint ``` ## Lost dispute ```sequence Bank->Stripe: Dispute resolved in users favour Stripe->Connector: Sends `charge.dispute.closed` webhook notification (with status `lost`) Connector->Ledger: Emits `DISPUTE_LOST` event Connector->Stripe: Transfer disputed amount+fee from connect account to platform account Ledger->Ledger: Update dispute transaction Ledger->SNS: Sends `DISPUTE_LOST` event SNS->Adminusers SQS subscriber: Sends `DISPUTE_LOST` event Adminusers SQS subscriber->Adminusers: Process SQS messages Adminusers-> Service admins: Sends dispute lost email Ledger->Selfservice: Displays updated dispute info in admin tool Ledger->PublicAPI: provides updated dispute info via v1/disputes endpoint ``` ### Reconciliation for lost disputes ```sequence Stripe->Connector: Sends `payout.paid` webhook Connector->Ledger: Reconciles payout and emits `DISPUTE_INCLUDED_IN_PAYOUT` event for dispute Ledger->Ledger: Update dispute transaction with settlement info Ledger->Selfservice: Dispute transaction appears in payments into bank account reports Ledger->PublicAPI: returns dispute transaction for search by settled_dates ``` ## Won dispute ```sequence Bank->Stripe: Dispute resolved in service favour Stripe->Connector: Sends `charge.dispute.closed` webhook notification (with status `won`) Connector->Ledger: Emits `DISPUTE_WON` event Connector->Ledger: Emits `REFUND_AVAILABILITY_UPDATED` event (to mark payment as refundable) Ledger->Ledger: Update dispute transaction Ledger->SNS: Sends `DISPUTE_WON` event SNS->Adminusers SQS subscriber: Sends `DISPUTE_WON` event Adminusers SQS subscriber->Adminusers: Process SQS messages Adminusers-> Service admins: Sends dispute won email Ledger->Selfservice: Displays updated dispute info in admin tool Ledger->PublicAPI: provides updated dispute info via v1/disputes endpoint ``` ## Evidence submitted ```sequence Stripe->Connector: Sends `charge.dispute.updated` webhook notification (with status `won`) Connector->Ledger: Emits `DISPUTE_EVIDENCE_SUBMITTED` event Ledger->Ledger: Update dispute transaction Ledger->SNS: Sends `DISPUTE_EVIDENCE_SUBMITTED` event SNS->Adminusers SQS subscriber: Sends `DISPUTE_EVIDENCE_SUBMITTED` event Adminusers SQS subscriber->Adminusers: Process SQS messages Adminusers-> Service admins: Sends dispute evidence submitted email Ledger->Selfservice: Displays updated dispute info in admin tool Ledger->PublicAPI: provides updated dispute info via v1/disputes endpoint ```