Complete reference of all dispute states, reason codes, outcome codes, and their meanings.
A dispute progresses through several states from initiation to resolution. Each state represents a phase in the dispute lifecycle where specific actions are available to you. Understanding these states helps you respond appropriately and resolve disputes efficiently.
| State | Description | Partner actions available | Key endpoints |
|---|---|---|---|
| Dispute opened. You must respond before deadline. | Review details, submit evidence, accept loss | |
| Your evidence is under review by Klarna. | Monitor progress (no new actions) | |
| Preliminary decision made. You can appeal within 10 days. | Review preliminary decision, accept loss, or appeal | |
| Final review in progress after appeal submission. | Monitor progress (no new actions) | |
| Final resolution determined (WON or LOST). | No actions available (final state) |
Quick tip: The most critical actions happen in the INITIATED state. Missing the deadline results in automatic loss.
What happens: When a dispute is initiated, Klarna notifies you and immediately withholds the disputed amount along with a dispute fee. The dispute fee is non-refundable regardless of outcome, but the disputed amount will be refunded if you win.
Webhook: payment.dispute.state-change.initiated
Your options: You must take action before the deadline expires:
For partial disputes, specify a partner_proposed_refund_amount in your defense along with evidence for the remaining amount
Response deadline:
| Dispute reason | Response time |
|---|---|
| Purchase Unauthorized | 7 days |
| • Return not possible<br>• Refund not processed<br>• Products or services not received<br>• Products defective or not as described<br>• Incorrect amount | 21 days |
Important: If you don't respond within the deadline, the dispute automatically moves to CLOSED with a LOST outcome.
When to accept a loss:
Consider accepting a loss rather than defending when:
Accepting loss implications:
Example: FashionFusion receives a dispute from a customer who received a damaged handbag. The customer provides clear photos of the damage, and the shipping cost for a replacement is minimal. After reviewing the evidence, FashionFusion accepts the loss and issues a prompt refund. This saves time and resources while maintaining customer satisfaction.
What happens: You've submitted your defense evidence within the deadline. Klarna's dispute team is now reviewing your case and the evidence provided.
Webhook: payment.dispute.state-change.representment
Your action: No action required. Wait for Klarna's review to complete. You cannot submit additional evidence during this state.
Representment substates:
The REPRESENTMENT state includes several substates that indicate progress:
| Substate | Meaning |
|---|---|
| You can still submit evidence before deadline (during INITIATED state) |
| Your evidence is under review by Klarna |
| Deadline passed without response - dispute will close as LOST |
| You accepted the loss during INITIATED state |
| Dispute amount fell below your configured threshold - automatically accepted as LOST |
What happens: Klarna has issued a preliminary decision in favor of the customer. You have the opportunity to appeal this decision if you believe there was an error in Klarna's assessment.
Webhook: payment.dispute.state-change.pre-arbitration
Your options:
LOST after 10 daysImportant: You have 10 days to file an appeal. If no appeal is submitted, the dispute automatically closes with Klarna's preliminary decision.
How the appeal process works:
LOSTpreliminary_outcome_detailed field contains the specific reason codeARBITRATIONWONLOST, and arbitration fees applyNote: Arbitration fees apply if you lose the appeal. Only submit appeals when you have strong grounds to challenge the preliminary decision.
What happens: You've appealed Klarna's preliminary decision. Klarna's dispute team is conducting a thorough review of your appeal and the evidence to make a final decision.
Webhook: payment.dispute.state-change.arbitration
Your action: No action required. Klarna will review and resolve the case within 5 days.
What happens: The dispute has reached a final resolution - either WON (in your favor) or LOST (in customer's favor).
Webhook: payment.dispute.state-change.closed
Possible paths to closure:
Dispute WON by Partner:
INITIATED → REPRESENTMENT → CLOSED (WON)INITIATED → REPRESENTMENT → PRE_ARBITRATION (LOST) → ARBITRATION → CLOSED (WON)Dispute LOST by Partner:
INITIATED → CLOSED (LOST)INITIATED → CLOSED (LOST)INITIATED → REPRESENTMENT → PRE_ARBITRATION (LOST) → CLOSED (LOST)INITIATED → REPRESENTMENT → PRE_ARBITRATION → ARBITRATION → CLOSED (LOST)Settlement details:
WON: Klarna refunds the withheld dispute amount. Dispute fee remains non-refundable.LOST: Neither the withheld dispute amount nor the dispute fee is refunded.Your action: No further action required.
When a dispute reaches the CLOSED state, it has one of two outcomes:
| Outcome | Description | Financial impact |
|---|---|---|
| You won the dispute | Disputed amount released back to you. Dispute fees may still apply depending on circumstances. |
| Customer won the dispute | Disputed amount goes to customer. Dispute fees apply. |
For complete information about dispute fees, see Dispute fees.
The dispute_outcome_detailed field provides a specific reason code explaining why the dispute was resolved the way it was. These codes help you understand the decision and identify areas for improvement.
Important: The dispute_outcome_detailed field is an open enum - new values may be added in the future. Your integration should handle unknown values gracefully.
Outcome codes fall into several categories:
Outcomes favorable to you (WON):
Outcomes requiring action (may trigger fees):
Outcomes unfavorable to you (LOST):
For a complete reference of all outcome codes, their descriptions, and when they apply, see the Payment Dispute API Reference.
Use outcome codes to:
Handle unknown codes gracefully:
Your integration should accept any string value for dispute_outcome_detailed since new codes may be added:
function getOutcomeDescription(outcomeCode) {
const knownOutcomes = {
'PARTNER_PROVIDED_VALID_SHIPPING_DETAILS': 'Valid shipping proof submitted',
'PARTNER_DID_NOT_REPLY_TO_DISPUTE_REQUEST': 'No response before deadline',
// ... other known codes
};
return knownOutcomes[outcomeCode] || `Unknown outcome: ${outcomeCode}`;
}