Guidelines for writing copy across Customer.io interfaces.
Copy is direct, calm, helpful, and human. It is not chatty, apologetic, self-promotional, or passive.
| Characteristic | Do | Don't |
|---|---|---|
| Direct | "Save changes" | "Go ahead and click Save to save your work" |
| Calm | "Connection lost. Check your network connection." | "Oops! Something went wrong." |
| Helpful | "No segments found. Adjust your search filters." | "No segments found." |
| Human | "This message will send to 4,200 people." | "This message will be delivered to 4,200 recipients." |
| Neutral | "The Agent is ready." | "You've unlocked a powerful new feature!" |
Use "you" and "your" to address the person directly. Don't mix "my" and "your" on the same screen. Pick one and use it consistently throughout a flow. Remove possessives when they add no meaning.
Don't start a sentence with "this" or "that" unless the noun immediately follows. It's ambiguous in context and harder to parse.
Tone adjusts to what the person is experiencing. A person completing their first setup flow needs reassurance. A person facing a destructive action needs precision.
| Context | Tone | Example |
|---|---|---|
| Task flow | Functional, invisible | "Save changes" |
| Onboarding / first use | Warm, clear | "You're all set. Your first message is ready to send." |
| Empty state | Helpful, inviting | "No segments yet. Create one to start targeting your audience." |
| Success | Brief, positive | "Campaign sent." |
| Warning | Clear, non-alarmist | "Deleting this attribute will remove it from 4,200 people." |
| Error | Direct, actionable | "Your changes couldn't be saved. Check your connection and try again." |
| Destructive / irreversible | Serious, precise | "Deleting this campaign is permanent and cannot be undone." |
| AI output | Outcome-first, hedged | "Based on recent behavior, these people are more likely to re-engage." |
Use sentence case everywhere (capitalize the first word and proper nouns only). That includes: headings, labels, buttons, tooltips, placeholder text, empty states, error messages, nav items, column headers.
When in doubt, use sentence case. Title case in labels creates inconsistency and adds visual noise: it's harder to scan, harder to localize, and creates a second capitalization system that readers have to learn.
Always capitalize the following nouns:
Use periods for full sentences. Do not use periods for standalone labels, button text, nav items, or column headers. Periods for labels signal that something requires comprehension rather than a quick scan.
Reserve exclamation points for genuine first-time milestones only to preserve impact. Exclamation points lose meaning through overuse. Never use exclamation points in errors, warnings, or routine confirmations.
Use ellipses only in progress and loading states.
There is one exception for buttons where it is appropriate to use when a button opens a dialog or requires additional input before the action completes. It signals "there's more to do before this happens" and removes hesitation from people who aren't sure what will be affected.
Do not use em dashes (—). Em dashes have become strongly associated with AI-generated text and add visual noise in dense interfaces. Restructure the sentence or use a comma instead.
Use an en dash (–) for ranges.
Use colons to introduce a list or label-value pair. Do not add a space before the colon. Omit the colon when the label and value are visually separated by layout.
Use ampersands (&) only in established product names ("Data & Integrations") or space-constrained UI (nav items, table headers). Write and everywhere else.
Use parentheses to define an acronym or term on first use. Do not use to add asides or extra thoughts. Restructure the sentence instead.
Always use an oxford comma in lists of three or more.
4,200 people not Four thousand two hundred people1,200 not 12001.2K, 4.8M10:30 am, 4:00 pm10:30 am ET9:00 am – 5:00 pmJuly 28, 2025MM/DD/YYYYUse relative time for timestamps and activity feeds. Use the appropriate unit once it reaches its threshold. Use 1 hour ago instead of 60 minutes ago.
Elapsed time:
Just now1 minute agoX minutes ago1 hour agoX hours ago1 day agoX days ago1 month agoX months ago1 year agoRemaining time:
X hours remainingX minutes remainingX seconds remainingAbout X minutes remaining (use "about" for estimates)Generic verbs like "Submit", "Confirm", and "OK" require people to hold surrounding context to understand what will happen. Specific verbs like "Delete campaign" and "Send newsletter" let people act with confidence. This matters most for destructive actions, where a vague label can have significant consequences.
| Type | Pattern | Examples |
|---|---|---|
| Primary action | Verb + object | Create campaign, Add people, Send broadcast |
| Destructive | Delete + object | Delete segment |
| Confirmation | Verb restating the action | Delete campaign, Send now |
| Cancel | Cancel | Always Cancel |
| Save | Save / Save changes / Save and close | Match to interaction model |
| Progressive | Forward-motion verb | Next, Continue, Set up object |
| Dialog-triggering | Verb… | Export… |
| Loading state | Present participle… | Saving…, Sending… |
Error states are high-anxiety moments. Vague errors ("Something went wrong") make people feel helpless. Blame-framed errors ("You entered an invalid value") create frustration. A good error message turns a moment of friction into a moment of guidance. It is often the difference between a person recovering independently and submitting a support ticket.
Answer as many of these as possible:
Frame validation errors as instructions, not accusations.
Use passive voice in payment, security, and account errors where active voice would imply blame or cause alarm.
State the consequence. If the action is reversible within a time window, say so. It's more informative and less alarming than stating only that something will be deleted.
Confirm what happened. Keep it brief. No editorializing. Reserve positive, warm tone and exclamation points for genuine milestones only.
"You entered an invalid email" → "Enter a valid email address.""Something went wrong" is never acceptable.Language can exclude people in ways that are both immediately obvious to the affected person and invisible to everyone else. For example, "easy" and "simple" invalidate the experience of people who find things hard.
| Don't use | Use instead |
|---|---|
| Whitelist | Allowlist |
| Blacklist | Blocklist |
| Master / slave | Primary / replica, leader / follower |
| Sanity check | Check, verify, review |
| Dummy data | Sample data, placeholder data |
| Kill / abort | Stop, cancel, end |
| Click | Select |
| See (as in "see all results") | View |
| Watch (video) | Play |
| Hit (a button) | Select |
| Easy / simple | Remove or rephrase |
| End-user | Person |
| Solution (as a noun) | Reframe as active verb phrase |
| Recalled / revoked / rescinded | Not available, not supported |
| He / she | They |
| He or she | They |
Use the most specific term available over generic abstractions.
Alt text makes images accessible to people who use screen readers and provides context when images don't load. Every informative image needs alt text. Decorative images should use alt="" to hide them from screen readers.
alt="" for decorative images.alt=""."Open rates peaked at 42% in March, driven by the re-engagement campaign." For complex charts, note the general pattern and link to the underlying data.AI features carry a specific set of trust risks that standard copy rules don't cover. Overclaiming ("optimal", "best") sets expectations the system can't always meet. Describing the technology instead of the outcome makes copy feel like a press release. Presenting AI output as final removes agency. Calling the Agent "a bot" or "a tool" undersells a capability that is core to the platform's value.