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 | Merchant 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 |
| <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 pocket mirror. The customer provides clear photos of the damage, and the disputed amount is less than the cost of handling the dispute. 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 within 30 days. 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 14 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 Merchant:
INITIATED → REPRESENTMENT → CLOSED (WON)INITIATED → REPRESENTMENT → PRE_ARBITRATION (LOST) → ARBITRATION → CLOSED (WON)Dispute LOST by Merchant:
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 here.
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 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}`;
}