Copywriting sample: error messages and a subject line

This is one of the three sample outputs that ship in the Copywriting download, published here in full and unedited so you can see what the skill produces before you buy.

Sample: a quick job (error messages and a subject line)

Sample output, not a customer story. Produced in a pre-release test run on 3 November 2026. The business is fictional and the buyer's answers were scripted. Shown unedited so you can see what the skill produces before you buy.

The full conversation:


BUYER: What should our error message say when a card payment fails? And the button under it.


AI: I can write that. Three quick things first:

  1. Do you have a brand file from an earlier session? If so, paste or attach it.
  2. What's the product, and where does the message appear (which screen, app or website)? Is there a message there now, or is this new?
  3. Does your app know why the payment failed (declined, expired card, lost connection), and is there a space limit or a tone you want?

BUYER: No brand file. It's Basketly, an online grocery app. it shows on the checkout screen in the app, just above the pay button. Nothing there yet; it's a new checkout. Failure reasons vary: declined, expired, network. yes, the payment provider tells us which one it was. No hard limit, but it's a small box on a phone. Friendly but brief.


AI: Because the app knows the reason, each failure gets its own short message and its own button. "Try again" is the wrong button for an expired card. It's still a small job, so here are the options and my pick in one go.

The brief

  • The piece: the message and button in the small box above the pay button on Basketly's app checkout when a card payment fails, one version for each reason: declined, expired, lost connection.
  • The reader and the action: a shopper finishing a grocery order on their phone. They fix the payment and place the order.
  • Voice and limit: "friendly but brief", in your words. Nothing is written down beyond that, so these follow my house rules, not a locked voice. No hard limit; a small box on a phone, so every line stays under about 80 characters.

Five options (character counts include spaces)

A. Say what happened, then the fix

ReasonMessageCharsButtonChars
DeclinedYour bank declined this card. Try another card, or check with your bank.72Use another card16
ExpiredThis card has expired. Add a new card to finish your order.59Add a new card14
ConnectionWe couldn't reach your bank. Check your connection and try again.65Try again9

B. A, plus "your basket is saved"

ReasonMessageCharsButtonChars
DeclinedYour bank declined this card. Your basket is saved, so you can try another card.80Use another card16
ExpiredThis card has expired. Your basket is saved. Add a new card to finish.70Add a new card14
ConnectionWe lost the connection to your bank. Your basket is saved. Try again in a moment.81Try again9

C. Shortest

ReasonMessageCharsButtonChars
DeclinedCard declined. Try another card.32Use another card16
ExpiredCard expired. Add a new one.28Add a new card14
ConnectionConnection lost. Try again.27Try again9

D. Names the card (only if the checkout can show the last four digits)

ReasonMessageCharsButtonChars
DeclinedYour card ending {last4} was declined. Try another card, or check with your bank.81Use another card16
ExpiredYour card ending {last4} has expired. Add a new card to finish your order.74Add a new card14
ConnectionWe couldn't reach your bank to charge your card ending {last4}. Try again.74Try again9

E. Same opening every time, then the reason

ReasonMessageCharsButtonChars
DeclinedPayment didn't go through. Your bank declined this card, so try another one.76Use another card16
ExpiredPayment didn't go through. This card has expired, so add a new one.67Add a new card14
ConnectionPayment didn't go through. We lost the connection, so please try again.71Try again9

My pick: A. Each line says what happened and what to do in the shopper's own terms, each button does exactly what its message asks, and it makes no promise we haven't confirmed.

What's not confirmed yet

  • [NEEDS: whether any money is taken or held when the connection drops mid-payment, from your payments team]. If none is, add "You haven't been charged." to the connection message in any option. Shoppers will wonder, and option E's "didn't go through" can't be used for the connection case until this is confirmed.
  • [NEEDS: whether the basket and the delivery slot are kept after a failed payment, from your product team]. Option B depends on it.
  • [NEEDS: whether the checkout can show the card's last four digits, from your developers]. Option D depends on it.

[NEEDS: ...] means not backed yet; it says what would back it and who has it.

Worth checking once it's live: show the three messages to a few people who shop with you and ask, "What would you do next?" If anyone hesitates, that's the line to fix.

Which one ships, or should I push further in one direction?


BUYER: Approved. I'd add: go with your recommendation, A.


AI: A is final:

  • Declined: "Your bank declined this card. Try another card, or check with your bank." Button: "Use another card"
  • Expired: "This card has expired. Add a new card to finish your order." Button: "Add a new card"
  • Connection: "We couldn't reach your bank. Check your connection and try again." Button: "Try again"

Once your payments team confirms no money is taken on a dropped connection, add "You haven't been charged." to the connection message. I've logged this in your brand file.


BUYER: Also give me a subject line for our 'your order is delayed' email.


AI: That one is a subject line for a single send, so the preview text should be written with it. Three quick questions:

  1. What do the first lines of the email tell the shopper: the new delivery time, the reason, anything you're offering?
  2. Can I write the preview text too?
  3. Does it go out before the original delivery slot, or after it's been missed?

BUYER: 1. The new delivery window and an apology. No credit or discount. 2. Yes. 3. Before the original slot, as soon as we know.


AI:

The brief

  • The piece: the subject line and preview text of Basketly's "your order is delayed" email, sent before the original slot. The email opens with the new delivery window and an apology.
  • The reader and the action: a shopper waiting on a grocery order, glancing at their phone's inbox. They open the email and see when the food will arrive.
  • Voice and limit: "friendly but brief", not yet written down, so house rules apply. Phones cut subject lines short; keep the key words at the front and check a live preview on a phone. {new_window} is your email tool's field for the new delivery window.

Five options (subject, then preview; character counts include the field name, so the live length depends on how the window is written)

SubjectCharsPreviewChars
AYour order will arrive later than planned41Here's your new delivery window, and our apology.49
BYour Basketly order is running late35New delivery window inside. Sorry for the wait.47
CNew delivery time for your order: {new_window}46Sorry, it's running later than we said.39
DSorry, your groceries are running late38Your new delivery window is {new_window}.41
ERunning late: your new delivery window38Sorry for the change. Here's when to expect it.47

My pick: D. It apologises first, because the delay is Basketly's to own, says "groceries" so the shopper knows at a glance which order it is, and puts the new window in the preview so they get the answer even if they don't open it.

What's not confirmed yet

  • [NEEDS: confirmation your email tool can put the new delivery window into the subject and preview, from whoever runs your email tool]. Options C and D depend on it; A, B and E don't.

The first line of the email should give the new window straight away, so it pays off the subject. If you send enough of these each week, I can give you a simple test to choose between D and C.

Which one ships, or should I push further in one direction?


BUYER: D. Approved.


AI: D is final. Subject: "Sorry, your groceries are running late". Preview: "Your new delivery window is {new_window}." Once your email tool can fill in the window, it's ready to go. Both pieces are logged in your brand file, with the open checks for your payments, product and email teams.