A failed card charge is easy money to lose. The customer usually didn't mean to churn. Their card expired, the bank flagged a renewal, or the retry email landed in a promotions tab nobody opens. A short text with a direct update link fixes a lot of these before the account pauses. The same goes for invoices that sit unpaid because the email got buried, and for review requests sent while the customer still remembers the job.
This post gives you copy-ready texts for all three, plus the rules that keep them out of carrier filters and out of TCPA trouble. Each template stays under 160 plain characters with typical merge values, so it bills as one segment. We explain why that matters for cost in the worked example further down.
Before you send: consent and registration
A billing relationship does not automatically give you permission to text someone. Get a phone number with a clear SMS opt-in at checkout or signup. Make the wording say what you'll send ("billing alerts and account updates"). Store the opt-in record yourself: the date, the wording and the page.
Purely informational texts like payment failures, invoices and receipts generally need prior express consent. Anything that includes an offer or promotion moves toward marketing, which needs prior express written consent. Review requests sit in a gray zone. If one includes a discount or a "come back soon" pitch, treat it as marketing.
For opt-in copy that works, see our SMS opt-in wording and keyword examples.
On the carrier side, the 10DLC campaign's use case has to match what you actually send. On Ready, the app files the campaign for you; over the API you set use_case:
- If the campaign only covers billing alerts, an account-notification use case fits.
- If the same campaign also carries review requests, a mixed use case is the honest choice.
Picking the wrong one gets you throttled. Our use-case picking guide walks through the choice.
On Ready, registration runs in-app:
- Brand: $10/mo
- Campaign: $20/mo
- Numbers: $2 per number
Most approvals take 2 to 7 days.
Failed payment templates (a four-step dunning cadence)
Use these as a drip campaign triggered by your billing system's failed-charge event. Stop the cadence the moment the payment succeeds.
Day 0, right after the failed charge:
Hi {first_name}, your {company} payment of ${amount} didn't go through. Update your card here: {link} Reply STOP to opt out.
Day 3:
{company}: your ${amount} payment for {plan} is still pending. Update billing at {link} to keep your account active.
Day 7, final notice before pause:
{company}: we'll pause your account on {date} unless billing is updated. It takes about a minute: {link} Questions? Just reply here.
On recovery:
{company}: thanks, {first_name}. Your payment went through and your account is all set.
A few notes on this cadence:
- Keep the recovery text. It closes the loop. Without it, some customers update their card and then wonder whether it worked.
- Put the business name first. A failed-payment text is exactly what phishers imitate. Leading with your name helps people trust it.
- Say what you won't ask for. Tell customers somewhere in onboarding that you'll never ask for card details by text.
- Never put card numbers in the body. No full card numbers, no last-four plus expiry, no account passwords.
Invoice templates
These work for service businesses, agencies and B2B SaaS that bill by invoice rather than card-on-file.
Invoice sent:
{company}: invoice #{number} for ${amount} is ready, due {date}. View and pay: {link} Reply STOP to opt out.
Three days before due:
{company}: friendly reminder, invoice #{number} (${amount}) is due {date}. Pay here: {link}
Overdue:
{company}: invoice #{number} for ${amount} was due {date}. Pay at {link} or reply to set up a payment plan.
Paid receipt:
{company}: payment of ${amount} received for invoice #{number}. Thank you!
The "reply to set up a payment plan" line is deliberate. Overdue customers often won't click a pay link they can't afford today, but they'll answer a text. Make sure someone actually watches the inbox for those replies.
One scope note: these templates are for collecting your own invoices. Third-party debt collection falls under separate federal rules (the FDCPA and Regulation F). Those rules restrict timing, frequency and content in ways this post doesn't cover. Get counsel before texting debts you've bought or are collecting for someone else.
Review and rating request templates
Send these within a few hours of the job or delivery, not days later.
Direct ask:
Hi {first_name}, thanks for choosing {company}. Would you leave us a quick review? {link} Reply STOP to opt out.
One follow-up, two or three days later (then stop):
{company}: if you have 30 seconds, a review helps a small team a lot: {link} Either way, thanks for your business.
Rating first, then the link:
{company}: how did we do today? Reply with a number from 1 to 5.
Thanks for the feedback, {first_name}. If you'd like to share it publicly, here's our review page: {link}
The rating-first version needs care. Sending the public review link only to people who replied 4 or 5 is review gating. Google's review policies prohibit it, and the FTC's rules on consumer reviews take a dim view of suppressing negative ones. Send the link to everyone who replies. Route low scores to a manager as well, not instead.
Also don't offer a discount in exchange for a positive review. Offering a discount at all likely turns the text into marketing.
For more survey-style asks, see feedback request texts that get replies.
Compliance checklist for billing texts
| Rule | Why it matters | What Ready does |
|---|---|---|
| Business name at the start | Identifies the sender and reduces phishing confusion | Nothing automatic: put it in your template |
| STOP language in the first text | Carriers expect it; customers need an exit | Inbound STOP is honored automatically and propagates across campaigns |
| No texts after opt-out | Each unwanted text is TCPA exposure | Opted-out numbers are refused up front and not charged |
| Respect local hours | Billing texts at 6 AM generate complaints | Held for permitted local hours: campaigns, drip campaigns and automations up to 24 hours, a one-to-one or API text up to 6, otherwise refused. A held text is charged only when it sends |
| Branded links, not public shorteners | Generic shortener domains get filtered | Use your own domain for pay and review links |
| Scrub known litigators | Statutory TCPA damages run $500 to $1,500 per text | Standalone scrub at $0.005 per contact, or account-wide scrubbing at $0.003 extra per segment when switched on (off by default) |
Ready also records your opt-in attestation for each bulk send and each API send that sets consent_attested: who sent, to how many, and when. That is an audit trail of your attestation, not a per-contact consent record. Your own system still has to keep each customer's opt-in.
None of this makes a sender lawsuit-proof. Compliance stays your responsibility. These checks just cut down the ways things go wrong.
If texts are approved but still not arriving, link domains and wording are the usual suspects. See why approved campaigns still get filtered.
Wiring it to your billing system
Most teams trigger dunning texts from a payment webhook. Webhooks retry, so send an Idempotency-Key with each text. That way a retried job never texts the customer twice:
POST https://api.tryready.com/v1/messages
X-API-Key: <key>
Idempotency-Key: 3f1c2a9e-7b4d-4e0a-9c55-1d2e8f6a0b13
{
"to": "+12125550199",
"body": "Acme: your $49.00 payment didn't go through. Update your card here: https://acme.com/billing Reply STOP to opt out.",
"consent_attested": true
} A good idempotency key is the invoice or charge ID plus the cadence step. Full request details are in the messages API docs.
Worked example: what a dunning cadence costs
This example assumes a SaaS company with 300 failed payments a month. Each one receives the three pre-recovery texts at one segment each. About 120 customers reply once, and on Ready replies bill like sent texts.
- Sent: 300 × 3 = 900 segments
- Replies: 120 × 1 = 120 segments
- Total: 1,020 segments
| Segments | Ready Standard rate | Carrier fee | |
|---|---|---|---|
| Plain text | 1,020 | 1,020 × $0.0075 = $7.65 | 1,020 × $0.0045 |
| Same texts with one emoji | 2,820 | 2,820 × $0.0075 = $21.15 | 2,820 × $0.0045 |
These all-in figures don't include screening. Scrubbing and landline validation add $0.003 per segment each if switched on, and both are off by default.
The second row is why the templates above have no emoji. A 140-character text with a single 💳 drops to the 70-character unicode limit and splits into 3 segments, which nearly triples the sent cost. If even a handful of those 300 customers recover a $49 subscription, the plain-text cadence has paid for itself many times over. There's no reason to give part of that back to an emoji.
The practical takeaway
Keep every billing text short, plain and branded. Put a direct link and a reply option in each one, and stop the cadence the moment the payment lands. Send review links to everyone, never just the happy customers. Keep your own opt-in records, because the carrier won't keep them for you and Ready keeps one only for a contact who signs up on a Ready-hosted opt-in page.
If you want to try these templates on Ready, you can sign up. The first 20 texts are free one-to-one sends (a card on file is required to send). They end once you pay for a registration, so test your templates with them before you register.