Your permission prompt already failed, without user saying no yet. Guide on fixing it
Every permission prompt is a contract negotiation. You have about three seconds to make the terms feel fair.
I’ve spent a good chunk of my career inside this exact problem. I design for email, SMS and push service providers— and push, more than almost anything else in the stack, is a game of asking permission well. Nothing sells until our customer’s probably audience says yes. Email is the same one layer removed: marketing consent is the gate standing in front of every campaign anyone will ever build.
So I kept circling the same question. How do you actually design “enable notifications”?
For a long time I thought of it like a toggle. Allow or don’t. Prompt on load, hope for the best, move on.

Wrong model. It isn’t a toggle. It’s a deal.
Permission prompt = Contract
Permission Prompt should have three parts exactly the same as a contract.
- What you’re giving up — your notifications, your location, your camera, your files, your contacts, your browsing data.
- What you’re getting — some benefit that requires that access.
- The deal — how long it lasts, how you get out, what happens if you say no.
Here’s what makes this structural rather than a nice metaphor: a contract is only worth something because both sides can point back to it later. The terms are what one party holds the other to when things change. A permission prompt is identical. The line you show before the ask isn’t copy , it’s the promise a user will remember the first time your “1–2 a week” quietly becomes four a day.
Most prompts communicate exactly one of those three parts. The first one. “Allow [App] to send you notifications?”
The user knows what they’re giving. They don’t know what they’re getting, and they have no idea about the terms.
What actually moves the number
The thing I got wrong for years wasn’t the copy. It was the timing.
web.dev’s guidance is direct: ask in context, after someone has interacted with the feature that needs the permission. Not on load. Not before they’ve seen anything worth the ask.

Chrome’s telemetry puts numbers on it. Most permission prompts on desktop appear with no signal of user intent at all — and when that happens, only 12% get allowed. Ask after a real interaction and allow rates rise to 30%. (web.dev)
A 2.5x lift. Same permission, same system dialog, same words. The only variable is when you asked.
The clearest version of this is file access. Ask for the file manager on app open and it’s an interrogation — nobody knows why this app wants their photos. Let someone tap “upload a photo” first, then ask, and the permission stops being a question. They already told you what they wanted. You’re clearing the path.

On iOS this isn’t optimization, it’s the whole game. You get one native prompt, ever. Decline it and recovery means the user navigating deep into system settings, which effectively nobody does. So the soft ask before it — your own screen, your own words, your own timing — is the only place you have any leverage at all.
Then the copy does the rest
Timing gets you the shot. Copy decides whether you convert it. And this is where I see good design teams lose ground they’d already won, because they treat the pre-permission screen as a formality instead of the pitch.

“We’d like to send you notifications” → “Be the first to know when your size is back in stock.” “Enable notifications for a better experience” → “Get notified when this drops in price.” “Stay updated with our latest offers” → “Early access to the sale, 24 hours before everyone else.”
Every one on the left describes what you want. Every one on the right describes what they get. Same permission. Completely different contract.
Two things separate the good ones from the merely polite:
Name the specific thing, not the category. “Back in stock” beats “product updates.” “Price drop on the item you viewed” beats “personalized offers.” Specificity is what makes a promise checkable — and a checkable promise is what a contract is.
Put the frequency in. “Usually 1–2 a week” does more for opt-in than any adjective you could add, because the unspoken fear isn’t notifications. It’s unbounded notifications. Naming the ceiling removes the actual objection.
The four asks I see handled badly most often

Push notifications. Most sites ask the second you land. Two seconds in, no idea what’s coming, so you block — unknown notifications are spam until proven otherwise. Wait for a signal instead: a cart add, a second view of the same product. Then the soft ask, then the system dialog.
Email opt-in. The popup before you’ve scrolled — “Subscribe for 10% off!” — works, which is why nobody kills it. But it anchors permission to a transaction instead of a relationship. Take the discount, ignore everything after. Keep the discount, add the ongoing reason: “We’ll email you when items in [category] go on sale. Plus 10% off your first order.” Same discount, different contract — one that survives the first purchase.
SMS opt-in. One checkbox, two unrelated asks: “order updates and marketing messages.” Someone wants to know when their package arrives. That isn’t the same as wanting flash-sale texts, and the single checkbox won’t let them separate the two — so they decline both. Split it. Two permissions, two contracts. Order updates as a service, clearly labeled. Marketing SMS as a choice, with its own terms: “Exclusive SMS-only deals, usually 2–3 texts a month.”
Data tracking consent. “We use your browsing data to show you relevant products — here’s how to opt out” turns a flinch-click into a decision. Active agreement, not passive consent. And active agreement produces better data, because the person understood the deal before accepting it.
The template
Three lines, every time:
The benefit — what you get. “Get notified when items you’ve viewed go on sale.” The mechanism — what it needs. “This sends push notifications to your browser.” The terms — the fine print that builds trust. “Usually 1–2 per week. Turn it off anytime in settings.”
What you get, what it costs, how you exit. It scales to anything:
Location — “Find stores near you → uses your location → only while the app is open, never in the background.” Camera — “Try on sunglasses virtually → uses your front camera → we don’t store the image.” Files — “Upload a photo → accesses your gallery → we only read the one you pick.”
Every permission becomes something a person can evaluate in three seconds. And the ones who say yes are agreeing to a deal they understood, not a prompt they panicked through.
The part that actually matters
Permission prompts are the moment your product’s relationship with someone is most fragile. Ask too early, you seem presumptuous. Ask without context, you seem shady. Ask without terms, you seem like every other app that wants data for reasons nobody bothered to state.

Ask at the right moment, with the right framing and honest terms, and you get something sturdier: informed consent. The only kind that holds.
So negotiate fairly. State the terms. And respect the person who says no as much as the one who says yes — because a no to a fair deal can become a yes later, once the value is clearer. A no from someone who felt tricked never comes back at all.
Thank you for reading and keep creating.
Yours truly, Riya
Your permission prompt already failed, without user saying no yet. Guide on fixing it was originally published in Bootcamp on Medium, where people are continuing the conversation by highlighting and responding to this story.