← All case studies
Case study · Klarna

Turning payment rejections into recoveries

Only a third of recoverable payment rejections were actually being recovered, and two-thirds of support inquiries traced back to a rejection message that left people confused, not informed. We rebuilt rejection content as a cross-company standard, backed by a scalable system rather than one-off copy.

Company
Klarna
Role
Head of UX Content Design
Focus
Rejection messaging standard
Context
Regulated credit · 12 languages
Based in
London, UK
2x
recoverable rejections actually recovered
-23%
inquiries about payment rejections in month one
29
distinct rejection reasons standardised into one system

The situation

Rejections already suck. Bad rejection messages add insult to injury. At Klarna, that wasn't just a feeling — it was a measurable problem: only around 32% of recoverable payment rejections were being recovered, and over two-thirds of all support inquiries traced back to a rejection in the first place. Behind the numbers were real customers, like the one who wrote in furious that they couldn't buy a birthday present because Pay in 4 wasn't available, signing off with "you're getting a £20 Pret voucher instead xxx."

Where the opening came from

An underwriting group was already focused on simplifying rejection criteria. We saw that as a genuine opening to take ownership of the content, not just clean up copy after the fact. Our role: define a new cross-company standard for rejection messaging. Our goal: help users understand exactly why they'd been rejected and what they could do about it, while staying empathetic rather than clinical.

Getting buy-in by roasting ourselves

Before asking anyone to change anything, we held a roast — put Klarna's own existing rejection messages up next to each other and let stakeholders see, in one glance, just how inconsistent and cold they'd become.

The root cause was visible the moment they were side by side. There was no standard, so individual teams had cobbled together their own rejection copy as they shipped. Which meant the highest-stakes content in the product — the moment we tell someone their money request is denied — was being written by people who had never written UX copy before, under deadline, with no guidance and no review. Not because they were careless, but because nobody had given them anything to work from.

Once it's framed that way, it stops being a copy problem and becomes an obvious systems gap. Nobody in the room defended the status quo, because nobody had chosen it.

Three existing Klarna rejection messages shown side by side: You can't pay this way at the moment, Unfortunately your credit score is too low, and Hej, you can't pay that way today — inconsistent in tone and formality.
The roast — three real rejection messages, none of them written to a shared standard. Seeing them side by side did more to build buy-in than any brief could have.

While the underwriting team worked on simplifying the rejection logic itself, we ran research into how other lenders and BNPL providers handled the same moment.

A research collage of competitor rejection screens from Apple Card, Afterpay, Laybuy, and Vivid, annotated with handwritten notes highlighting vague phrases like insufficient credit history and rejected.
Competitive research — even well-resourced products lean on vague, faintly apologetic language. "Insufficient credit history" tells a customer nothing they can act on.

Acceptance criteria before adjectives

With research and stakeholder buy-in in hand, we defined explicit acceptance criteria before writing a single rejection message — must-haves every message needed, signed off by the whole team, then used as a shared checklist to assess every draft. It's the habit borrowed from my product management work that shows up across this site: judge the content against criteria, not against opinion.

The criteria looked roughly like this:

Acceptance criteria — every rejection message
  • States what happened in the first sentence, before any explanation or apology.
  • Gives a reason the customer can act on — not a category name from the underwriting system.
  • Contains at least one next best action, even where the answer stays no.
  • Never implies the decision may change without saying what would change it.
  • Uses no more than one sentence of legal or regulatory copy in the main body.
  • Reads at or below a B1 comprehension level.
  • Contains no idiom, no metaphor, and no humour.
  • Survives translation into all 12 supported languages without losing the reason or the action.

Those last three criteria weren't ours alone to set — they came out of working with legal, accessibility and localisation partners, which is the part of this project I'd underestimated going in.

Filling out the template

Every rejection case got mapped against a single annotated template — heading, the updated plan on offer, available credit, next best actions, an educational note, legal copy where required, and CTAs — so the structure stayed identical even as the specific reason for rejection changed underneath it.

An annotated Klarna rejection template labelled with Heading, Updated plan, Available credit, Next best actions, Educational, Legal, and CTAs, showing how each section maps to a real rejection screen with an updated payment plan.
The template — every rejection message assembled from the same labelled parts, so "next best actions" and "educational" content stayed consistent no matter which rejection reason triggered them.

Here's what that produced once filled out for real rejection cases — the same underlying structure as the roast slide, but now doing the job properly.

Three finished Klarna rejection screens, each titled Sorry, we couldn't approve you for this purchase, with a clear explanation of what can be lent, next steps, and consistent CTAs like Make a payment and Choose another payment option.
The rejected purchase, explained — same honest news, but every message now tells the customer what they can actually do next.

The messages themselves

Here's what the standard produced across the most common rejection reasons. Each one is assembled from the same template slots, so the structure holds even as the reason underneath changes completely.

Over available credit
This order is over your available credit

You have £120 available and this order is £185. Your available credit goes up each time you pay off a plan.

Pay by cardSee my plans
Both numbers stated. The customer can do the subtraction themselves and knows exactly what would change the answer.
Too many active plans
You've reached your limit of 3 active plans

You can start a new plan as soon as one of your current plans is fully paid. Your next payment is due on 14 March.

See my plansPay by card
The answer is no today and yes on a date. Giving the date turns a refusal into a wait.
Overdue payment elsewhere
There's a payment overdue on another plan

Your payment of £32.50 was due on 2 March. Once it's paid, you can use Pay in 3 again — usually within a few minutes.

Pay £32.50 now
One action, the exact amount in the button, and a realistic time to resolution. This is the highest-recovery message in the set.
Limited history with us
We can't offer Pay in 3 for this order

We base this on your payment history with us, and this is your first order. Smaller orders are more likely to be approved while you build that history.

Pay by card
Names the mechanism without pretending the decision is arbitrary, and tells a new customer how to become an approved one.
Merchant not eligible
This shop doesn't accept Pay in 30

It's not related to your account. This shop does accept Pay in 3 and card payments.

Use Pay in 3Pay by card
Second sentence exists purely to stop the customer assuming they've been judged. Cheap to write, disproportionately calming.
Declined by the bank
Your bank declined this payment

The decision came from your bank, not from us, and they don't tell us the reason. Using a different card, or checking with your bank, usually sorts it.

Try another card
Admits the limit of what we know. Guessing at the bank's reason would be worse than saying we can't see it.
Verification incomplete
We need to check it's really you

This takes about 2 minutes, and you'll only need to do it once.

Confirm my details
Not really a rejection — a pause. Stating the duration and the one-off nature removes both reasons someone would abandon here.
Below the minimum
Orders under £35 can't be split into 3 payments

This order is £22. You can pay in full with a card, or add more to your basket and try again.

Pay by card
A rule, not a judgement — so it's stated as a rule. The second action is the one the merchant wants and the customer often takes.
Technical error at our end
Something went wrong on our side

This isn't about your account or your available credit. Try again in a few minutes and it should go through.

Try again
The one case where "try again later" is honest — so we say why it's honest. Without the second sentence, every customer assumes they were refused.
Payment method unavailable in market
Pay in 30 isn't available in Poland yet

It's not related to your account. Pay in 3 and card payments work here.

Use Pay in 3Pay by card
"Yet" is the only forward-looking word we allowed, and only where a launch was genuinely planned.

Illustrative examples in the pattern of the standard — representative of the structure and voice rather than the live production strings.

Read them together and the rules become visible

None of these messages is clever, and that's the point. What they share is more instructive than any single line:

  • The heading states the outcome, always. Never a greeting, never an apology, never a question. A customer scanning at a checkout should be able to read six words and know where they stand.
  • Every number the customer needs is present. £120 available, £185 order, £32.50 overdue, due 14 March. Vagueness in a rejection reads as evasion, even when it isn't.
  • System failures are explicitly separated from customer judgements. Three of these messages contain a sentence whose only job is "this isn't about you." That sentence has no functional content and I'd fight to keep it in every one.
  • The action verb in the button matches the action in the body. If the body says pay £32.50, the button says pay £32.50. Mismatches here are the most common cause of a customer not realising they can fix it.

And the words we banned outright

A short list, but it removed most of what was wrong with the originals:

at this time unfortunately we regret to inform you insufficient ineligible please try again later oops! your application has been declined

Each one fails for its own reason. "At this time" implies a future it never specifies. "Unfortunately" makes the company the injured party. "Insufficient" and "ineligible" are underwriting words, not customer words. "Oops!" is cheerful about someone's money. And "your application has been declined" is worst of all, because most customers never thought they were making an application — they thought they were buying a jumper.

Making it scale past the design file

Figma was where all of this got designed, reviewed and agreed — it's where the roast happened, where the template took shape, and where the team critiqued every draft. What a design file can't do is act as a source of truth for engineering, for translation vendors, or for the next new rejection reason someone adds six months later. We moved the finished copy into a structured variables system — 29 distinct rejection reasons, each with its own named variable and approved text — so any team could reference the right message without re-writing it from scratch or drifting from the standard.

A Figma variables panel titled Rejection_reason, listing 29 named variables such as dowpayment_required, too_low_credit_score, limit_exceeded, and high_risk, each mapped to approved rejection copy.
29 reasons, one system — every rejection reason lives as a named variable with approved copy attached, so new screens pull from the standard instead of reinventing it.

Rejection GPT

To keep the standard alive as new rejection copy got drafted, we built a small internal tool — nicknamed Rejection GPT — that took a task prompt asking for a copy revision plus a brief explanation for each change, and returned both in a structured table: the suggested rewrite, and the specific reasoning behind it, referenced against our own guidelines.

A diagram showing Rejection GPT's input, a task prompt asking for a copy revision and explanation formatted as a table, and its result, a table showing current copy, suggested improvement, and reason for change.
Rejection GPT — not just a rewrite tool. Every suggested change came with its own reasoning, so a non-writer reviewing the output could see why it aligned with the standard.
"Rejections already suck. Our job was never to make that feeling disappear — just to stop making it worse."

The partners who had to sign this off

Rejection copy is not a design decision a content team gets to make alone. Klarna is a regulated credit provider, which means the moment you tell someone they can't borrow money, the message stops being product copy and becomes a regulated communication. Three sets of partners shaped every message in the standard, and building those relationships early was as much of the work as the writing.

Legal and compliance

Consumer credit communications carry obligations that don't bend for tone of voice. Certain rejection reasons require specific disclosures. Some wording implies a formal credit decision — with the rights and follow-up that come attached — and some doesn't, so the difference between "we can't approve this" and "your application was declined" is a legal distinction as well as an emotional one. Language that hints a decision might change, or suggests a customer's creditworthiness in terms we can't substantiate, isn't available to us.

That's why the template treats legal copy as its own labelled slot rather than something woven through the message. It gave legal a single, consistent place to review — they could look at one component across 29 rejection reasons instead of auditing 29 bespoke screens — and it stopped mandatory wording from being quietly rephrased by whoever wrote the next screen. Reviews got dramatically faster once there was one thing to approve rather than a moving target.

The trade I'd make againCapping legal copy at one sentence in the main body, with the rest linked, was the negotiation that took longest. The instinct on the legal side is to include everything on the screen. The evidence on ours was that a customer who can't find the reason contacts support anyway — which is worse for everyone, including compliance.

Accessibility and comprehension

The B1 reading-level criterion wasn't a stylistic preference — it was an accessibility requirement in disguise, and it did double duty. Rejections arrive at a moment of high cognitive load: someone is at a checkout, or has just been told no about money. Comprehension drops exactly when precision matters most.

So the accessibility constraints were written into the acceptance criteria rather than checked at the end:

  • B1 or below, so the message is comprehensible under stress and to the very large share of our customers reading in a second or third language.
  • No idiom, metaphor or humour — the first things to fail for non-native readers, screen reader users, and anyone skim-reading.
  • Reason and action in text, never in colour or icon alone, so the message survives being read aloud.
  • Front-loaded meaning, because a screen reader user hears the first clause before deciding whether to keep listening.

Writing to a reading level is the single highest-leverage accessibility move available to a content designer, and it's the one most often skipped because it doesn't look like accessibility work.

Localisation

Every message shipped in 12 languages. That put a hard constraint on the source English: anything that lost its reason or its action in translation was a failed message, not a translation problem. "Your application didn't quite make the cut" is fine in a London standup and useless to a reader in São Paulo or Warsaw.

Softening language is the first thing to break in translation, and what survives is usually vaguer than what you started with — which defeats the whole standard. Writing plainly here wasn't a preference. It was the only way the reason arrived intact.

Principles for rejection copy

These are the rules the standard came down to. They're the checklist I still use whenever a product has to tell someone no — a declined payment, a failed verification, a rejected application.

Principle 01

Say why, in terms the customer can act on

"Insufficient credit history" is technically a reason and practically a shrug. The test isn't whether you've stated a cause — it's whether the customer now knows something they didn't before that changes what they do next.

✗ Before
"We're unable to approve this purchase at this time."
No cause, no timeframe, no action. "At this time" implies a future that's never specified.
✓ After
"This purchase is over your available credit of £120. Try a smaller purchase, or pay off an existing plan to free up credit."
Names the constraint, gives the number, offers two routes out.
Principle 02

Always offer a next best action — even when the answer stays no

The single biggest lever on recovery. A rejection with no route forward is a dead end, and a dead end is where a customer either contacts support or leaves. Every message in the standard had a "next best actions" slot, and it was never allowed to be empty.

✗ Dead end
"Unfortunately you're not eligible for this payment option."
True, final, and gives the customer nowhere to go but support.
✓ Route forward
"You can't use Pay in 30 for this purchase. Pay in 3 is available for orders up to £200 — or pay in full with a card."
Two live alternatives at the exact moment the customer still wants to buy.

Sometimes the honest answer really is no. Even then there's a next action — it's just a temporal one: "Your next payment clears on 14 March. After that, this limit updates automatically." That's still a route, and it's still better than silence.

Principle 03

Be honest before you're warm

Rejections already suck. Our job was never to make that feeling disappear — just to stop making it worse. Over-cheerful copy at the moment of refusal reads as tone-deaf, and apologising repeatedly makes the company sound like the injured party. Deliver the news plainly, then be useful.

✗ Too soft
"Oh no! We're so sorry, but it looks like we can't quite make this one work right now! 😔"
Three softeners before any information. The emotion is performed, not felt.
✓ Honest, then useful
"We can't approve this purchase. Here's why, and what you can do about it."
Respects the customer enough to be direct, then earns trust by helping.
Principle 04

Separate the reason from the education

Customers rejected for credit reasons often don't understand how the underlying system works — and a rejection screen is, awkwardly, the moment they're most motivated to learn. But mixing explanation into the reason makes both harder to read.

✗ Fused
"Because your available credit is based on your repayment history, order value and how many active plans you have, and you currently have three active plans, we can't approve this."
The reader hits 30 words of mechanism before finding out they've been refused.
✓ Separated
Reason: "You've reached your limit of 3 active plans."
Educational note: "Your limit updates as you pay off existing plans."
The news first, the mechanism second. Anyone who only wants the first can stop reading.
Principle 05

Treat the constraint as the brief, not the obstacle

The mandatory legal wording, the reading level, the twelve languages — none of these are things you write around. They're the actual shape of the problem, and messages designed against them from the start are better than messages softened afterwards to comply.

✗ Written first, complied later
"Sorry! We couldn't approve this one right now — but don't worry, things change! [Legal disclosure appended below in 9pt]"
The compliance text arrives as a bolt-on, and "things change" makes an implied promise nobody can stand behind.
✓ Designed to the constraint
"We can't approve this purchase. You've reached your limit of 3 active plans." [Legal slot: one sentence, same position every time]
The obligation has a designed home. Legal reviews one component, not 29 screens.
Principle 06

Judge it against criteria, not adjectives

We defined explicit acceptance criteria before writing a single message, then assessed every draft against that shared checklist. It's the only reliable defence against copy-by-committee — because "I don't love this" stops being feedback the moment there's an agreed standard to point at.

What this sounds like in review Before: "I think this feels a bit harsh, can we warm it up?" — unanswerable, and usually settled by seniority.

After: "This fails criterion 3 — there's no next best action." — answerable, and settled by the person who can fix it.
Principle 07

Design files are where content gets made, not where it lives

Figma is the right place to design, critique and align on rejection screens, and we did all three there. It just isn't a distribution system. Engineering builds from the codebase, translators work in their own tooling, and the person adding a thirtieth rejection reason six months later needs a canonical answer they can find without asking a designer. Structured variables — one named variable and approved text per reason — are what turned a well-designed set of screens into a standard that survives its authors.

The test I'd apply to any content standard now: if the next person to need it has to ask you where it is, it isn't a standard yet. It's a file you happen to own.

The outcome

The number of recoverable rejections actually recovered doubled. Inquiries about payment rejections dropped 23% in the first month alone. Angry reviews and social posts about rejections became noticeably rarer. And — we can only hope — nobody's getting a consolation Pret voucher for their birthday anymore.